import { BadRequestException, Body, Controller, HttpCode, Post, UploadedFile, UseInterceptors, } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { memoryStorage } from 'multer'; import { ParseFlyerDto } from './dto/parse-flyer.dto'; import { FlyerParseResponse, FlyerParsingService } from './flyer-parsing.service'; const ALLOWED_UPLOAD_MIMES = new Set([ 'application/pdf', 'application/octet-stream', 'text/plain', ]); @Controller('flyer') export class FlyerParsingController { constructor(private readonly flyerParsingService: FlyerParsingService) {} @Post('parse') @HttpCode(200) @UseInterceptors( FileInterceptor('file', { storage: memoryStorage(), limits: { fileSize: 15 * 1024 * 1024 }, fileFilter: (_req, file, cb) => { if (ALLOWED_UPLOAD_MIMES.has(file.mimetype)) { cb(null, true); return; } cb( new BadRequestException('Otillåten filtyp för flyer-parser. Stöd: PDF eller textfil.'), false, ); }, }), ) async parseFlyer( @Body() body: ParseFlyerDto, @UploadedFile() file?: Express.Multer.File, ): Promise { if (!file && !body?.text?.trim()) { throw new BadRequestException('Skicka antingen fil under "file" eller text i body.text.'); } const text = body?.text?.trim(); return this.flyerParsingService.parseFlyer({ file, text, retailer: body?.retailer ?? 'willys', }); } }