import { Body, Controller, Delete, Get, Param, Patch, Post, Put, UseGuards, UseInterceptors, } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { JwtAdminGuard } from '../../common/guards/jwt-admin.guard'; import { PermissionsGuard } from '../../common/guards/permissions.guard'; import { RequirePermission } from '../../common/decorators/require-permission.decorator'; import { AuditInterceptor } from '../../common/interceptors/audit.interceptor'; import { CreatePrizeDto } from './dto/create-prize.dto'; import { UpdatePrizeDto } from './dto/update-prize.dto'; import { UpdateStockDto } from './dto/update-stock.dto'; import { PrizeService } from './prize.service'; @ApiTags('Admin Prizes (مدیریت جوایز)') @Controller('admin') @UseGuards(JwtAdminGuard, PermissionsGuard) @UseInterceptors(AuditInterceptor) @ApiBearerAuth('AdminAuth') export class AdminPrizeController { constructor(private readonly prizeService: PrizeService) {} @Post('campaigns/:campaignId/prizes') @RequirePermission('prizes:manage') @ApiOperation({ summary: 'ایجاد جایزه جدید برای یک کمپین' }) @ApiResponse({ status: 201, description: 'جایزه با موفقیت به کمپین اضافه شد' }) async create( @Param('campaignId') campaignId: string, @Body() dto: CreatePrizeDto, ) { return this.prizeService.create(campaignId, dto); } @Get('campaigns/:campaignId/prizes') @RequirePermission('prizes:read') @ApiOperation({ summary: 'لیست تمام جوایز تعریف‌شده برای یک کمپین' }) async findByCampaign(@Param('campaignId') campaignId: string) { return this.prizeService.findByCampaign(campaignId); } @Get('prizes/:id') @RequirePermission('prizes:read') @ApiOperation({ summary: 'دریافت مشخصات کامل یک جایزه' }) async findOne(@Param('id') id: string) { return this.prizeService.findOne(id); } @Patch('prizes/:id') @Put('prizes/:id') @RequirePermission('prizes:manage') @ApiOperation({ summary: 'ویرایش اطلاعات و وزن جایزه' }) async update(@Param('id') id: string, @Body() dto: UpdatePrizeDto) { return this.prizeService.update(id, dto); } @Patch('prizes/:id/stock') @RequirePermission('prizes:manage') @ApiOperation({ summary: 'شارژ یا اصلاح دستی موجودی جایزه' }) async updateStock(@Param('id') id: string, @Body() dto: UpdateStockDto) { return this.prizeService.updateStock(id, dto); } @Delete('prizes/:id') @RequirePermission('prizes:manage') @ApiOperation({ summary: 'حذف جایزه (در صورت عدم ثبت در نتایج قرعه‌کشی)' }) async remove(@Param('id') id: string) { return this.prizeService.remove(id); } }