Files
Lucky_Wheel/apps/api/src/modules/winner/admin-spin.controller.ts
T

44 lines
1.6 KiB
TypeScript
Raw Normal View History

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';
import { AuditInterceptor } from '../../common/interceptors/audit.interceptor';
import { WinnerService } from './winner.service';
@ApiTags('Admin Spins (تاریخچه اسپین‌ها)')
@Controller('admin/spins')
@UseGuards(JwtAdminGuard)
@UseInterceptors(AuditInterceptor)
@ApiBearerAuth('AdminAuth')
export class AdminSpinController {
constructor(private readonly winnerService: WinnerService) {}
@Get()
@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')
@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);
}
}