2026-09-10 01:58:29 +03:30
|
|
|
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';
|
2026-10-02 16:29:23 +03:30
|
|
|
import { PermissionsGuard } from '../../common/guards/permissions.guard';
|
|
|
|
|
import { RequirePermission } from '../../common/decorators/require-permission.decorator';
|
2026-09-10 01:58:29 +03:30
|
|
|
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')
|
2026-10-02 16:29:23 +03:30
|
|
|
@UseGuards(JwtAdminGuard, PermissionsGuard)
|
2026-09-10 01:58:29 +03:30
|
|
|
@UseInterceptors(AuditInterceptor)
|
|
|
|
|
@ApiBearerAuth('AdminAuth')
|
|
|
|
|
export class AdminPrizeController {
|
|
|
|
|
constructor(private readonly prizeService: PrizeService) {}
|
|
|
|
|
|
|
|
|
|
@Post('campaigns/:campaignId/prizes')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:manage')
|
2026-09-10 01:58:29 +03:30
|
|
|
@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')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:read')
|
2026-09-10 01:58:29 +03:30
|
|
|
@ApiOperation({ summary: 'لیست تمام جوایز تعریفشده برای یک کمپین' })
|
|
|
|
|
async findByCampaign(@Param('campaignId') campaignId: string) {
|
|
|
|
|
return this.prizeService.findByCampaign(campaignId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('prizes/:id')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:read')
|
2026-09-10 01:58:29 +03:30
|
|
|
@ApiOperation({ summary: 'دریافت مشخصات کامل یک جایزه' })
|
|
|
|
|
async findOne(@Param('id') id: string) {
|
|
|
|
|
return this.prizeService.findOne(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Patch('prizes/:id')
|
|
|
|
|
@Put('prizes/:id')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:manage')
|
2026-09-10 01:58:29 +03:30
|
|
|
@ApiOperation({ summary: 'ویرایش اطلاعات و وزن جایزه' })
|
|
|
|
|
async update(@Param('id') id: string, @Body() dto: UpdatePrizeDto) {
|
|
|
|
|
return this.prizeService.update(id, dto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Patch('prizes/:id/stock')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:manage')
|
2026-09-10 01:58:29 +03:30
|
|
|
@ApiOperation({ summary: 'شارژ یا اصلاح دستی موجودی جایزه' })
|
|
|
|
|
async updateStock(@Param('id') id: string, @Body() dto: UpdateStockDto) {
|
|
|
|
|
return this.prizeService.updateStock(id, dto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Delete('prizes/:id')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('prizes:manage')
|
2026-09-10 01:58:29 +03:30
|
|
|
@ApiOperation({ summary: 'حذف جایزه (در صورت عدم ثبت در نتایج قرعهکشی)' })
|
|
|
|
|
async remove(@Param('id') id: string) {
|
|
|
|
|
return this.prizeService.remove(id);
|
|
|
|
|
}
|
|
|
|
|
}
|