import { Controller, Get, Header, Query, Res, UseGuards, UseInterceptors, } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { Response } from 'express'; 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 { WinnerService } from './winner.service'; @ApiTags('Admin Spins (تاریخچه چرخش‌ها)') @Controller('admin/spins') @UseGuards(JwtAdminGuard, PermissionsGuard) @UseInterceptors(AuditInterceptor) @ApiBearerAuth('AdminAuth') export class AdminSpinController { constructor(private readonly winnerService: WinnerService) {} @Get() @RequirePermission('spins:read') @ApiOperation({ summary: 'لیست تاریخچه تمام چرخاندن‌های گردونه با فیلتر و جستجو' }) @ApiQuery({ name: 'page', required: false }) @ApiQuery({ name: 'pageSize', required: false }) @ApiQuery({ name: 'campaignId', required: false }) @ApiQuery({ name: 'prizeId', required: false }) @ApiQuery({ name: 'search', required: false }) async findAll(@Query() query: any) { return this.winnerService.findAllSpins(query); } @Get('export') @RequirePermission('reports:export') @ApiOperation({ summary: 'خروجی فایل اکسل از تاریخچه تمام چرخش‌ها' }) @Header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') @Header('Content-Disposition', 'attachment; filename=spins.xlsx') async export(@Query() query: any, @Res() res: Response) { const buffer = await this.winnerService.exportSpinsExcel(query); res.send(buffer); } }