import { Controller, Get, Post, Body, Patch, Param, Delete, UseInterceptors, ParseIntPipe, UploadedFile, } from '@nestjs/common'; import { CuestionarioService } from './cuestionario.service'; import { CreateCuestionarioDto, CreateCuestionarioEventoDto, } from './dto/create-cuestionario.dto'; import { UpdateCuestionarioDto } from './dto/update-cuestionario.dto'; import { FileInterceptor } from '@nestjs/platform-express'; import { diskStorage } from 'multer'; import { extname } from 'path'; import { CuestionarioApiDocumentation } from './docs/cuestionario.documentation'; @Controller('cuestionario') @CuestionarioApiDocumentation.ApiController export class CuestionarioController { constructor(private readonly cuestionarioService: CuestionarioService) {} @Post() @CuestionarioApiDocumentation.ApiCreate create(@Body() createCuestionarioDto: CreateCuestionarioDto) { return this.cuestionarioService.create(createCuestionarioDto); } @Post('evento') @CuestionarioApiDocumentation.ApiCreateWithEvento createCuestionarioEvento( @Body() createCuestionarioDto: CreateCuestionarioEventoDto, ) { return this.cuestionarioService.createCuestionarioEvento( createCuestionarioDto, ); } @Post(':id/banner') @UseInterceptors( FileInterceptor('banner', { storage: diskStorage({ destination: './public/banners', // Asegúrate de que esta carpeta exista filename: (req, file, cb) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9); const ext = extname(file.originalname); cb(null, `banner-${uniqueSuffix}${ext}`); }, }), fileFilter: (req, file, cb) => { const allowedTypes = /jpeg|jpg|png|webp/; const ext = extname(file.originalname).toLowerCase(); if (allowedTypes.test(ext)) { cb(null, true); } else { cb(new Error('Tipo de archivo no permitido'), false); } }, }), ) async subirBannerEvento( @Param('id', ParseIntPipe) id: number, @UploadedFile() file: Express.Multer.File, ) { if (!file) { throw new Error('No se ha recibido un archivo válido'); } return this.cuestionarioService.asociarBanner(id, file.filename); } @Get() @CuestionarioApiDocumentation.ApiGetAll findAll() { return this.cuestionarioService.findAll(); } @Get(':id') @CuestionarioApiDocumentation.ApiGetOne findOne(@Param('id') id: string) { return this.cuestionarioService.findOne(+id); } @Get(':id/formulario') @CuestionarioApiDocumentation.ApiGetFormulario findFormulario(@Param('id') id: string) { return this.cuestionarioService.findCompleto(+id); } @Patch(':id') @CuestionarioApiDocumentation.ApiUpdate update( @Param('id') id: string, @Body() updateCuestionarioDto: UpdateCuestionarioDto, ) { return this.cuestionarioService.update(+id, updateCuestionarioDto); } @Delete(':id') @CuestionarioApiDocumentation.ApiRemove remove(@Param('id') id: string) { return this.cuestionarioService.remove(+id); } }