2026-09-10 01:58:29 +03:30
|
|
|
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';
|
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 { WinnerService } from './winner.service';
|
|
|
|
|
|
|
|
|
|
@ApiTags('Admin Spins (تاریخچه اسپینها)')
|
|
|
|
|
@Controller('admin/spins')
|
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 AdminSpinController {
|
|
|
|
|
constructor(private readonly winnerService: WinnerService) {}
|
|
|
|
|
|
|
|
|
|
@Get()
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('spins:read')
|
2026-09-10 01:58:29 +03:30
|
|
|
@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')
|
2026-10-02 16:29:23 +03:30
|
|
|
@RequirePermission('reports:export')
|
2026-09-10 01:58:29 +03:30
|
|
|
@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);
|
|
|
|
|
}
|
|
|
|
|
}
|