68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
Post,
|
|
Put,
|
|
Query,
|
|
UseGuards,
|
|
ValidationPipe,
|
|
} from '@nestjs/common'
|
|
import { UserRole } from '@mp-pilates/shared'
|
|
import { JwtAuthGuard } from '../auth/jwt-auth.guard'
|
|
import { RolesGuard } from '../auth/roles.guard'
|
|
import { Roles } from '../auth/roles.decorator'
|
|
import { FlashSaleService } from './flash-sale.service'
|
|
import { CreateFlashSaleDto } from './dto/create-flash-sale.dto'
|
|
import { UpdateFlashSaleDto } from './dto/update-flash-sale.dto'
|
|
|
|
@Controller('admin/flash-sales')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
export class FlashSaleAdminController {
|
|
constructor(private readonly flashSaleService: FlashSaleService) {}
|
|
|
|
/** POST /admin/flash-sales — create */
|
|
@Post()
|
|
create(
|
|
@Body(new ValidationPipe({ whitelist: true })) dto: CreateFlashSaleDto,
|
|
) {
|
|
return this.flashSaleService.createFlashSale(dto)
|
|
}
|
|
|
|
/** GET /admin/flash-sales — list (paginated) */
|
|
@Get()
|
|
list(
|
|
@Query('page') page?: string,
|
|
@Query('limit') limit?: string,
|
|
) {
|
|
return this.flashSaleService.getAdminFlashSales(
|
|
page ? parseInt(page, 10) : 1,
|
|
limit ? parseInt(limit, 10) : 20,
|
|
)
|
|
}
|
|
|
|
/** GET /admin/flash-sales/:id — detail */
|
|
@Get(':id')
|
|
detail(@Param('id') id: string) {
|
|
return this.flashSaleService.getFlashSaleDetail(id)
|
|
}
|
|
|
|
/** PUT /admin/flash-sales/:id — update */
|
|
@Put(':id')
|
|
update(
|
|
@Param('id') id: string,
|
|
@Body(new ValidationPipe({ whitelist: true })) dto: UpdateFlashSaleDto,
|
|
) {
|
|
return this.flashSaleService.updateFlashSale(id, dto)
|
|
}
|
|
|
|
/** DELETE /admin/flash-sales/:id — delete (DRAFT only) */
|
|
@Delete(':id')
|
|
remove(@Param('id') id: string) {
|
|
return this.flashSaleService.deleteFlashSale(id)
|
|
}
|
|
}
|