import { Controller, Get, Delete, Query, HttpCode, HttpStatus, } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiQuery } from '@nestjs/swagger'; import { UploadcareService } from './uploadcare.service'; import { FileType } from './enums/file-type.enum'; import { LogToDiscord } from 'src/shared/decorators/log-to-discord.decorator'; @ApiTags('Upload: Uploadcare Storage') @Controller('uploadcare') @LogToDiscord() export class UploadcareController { constructor(private readonly uploadcareService: UploadcareService) {} @Get('signed-upload') @ApiOperation({ summary: 'Get signed upload parameters' }) @ApiQuery({ name: 'type', enum: FileType, required: false }) getSignedUploadParams(@Query('type') type?: FileType) { return this.uploadcareService.generateUploadSignature(type); } @Delete('by-url') @HttpCode(HttpStatus.OK) @ApiOperation({ summary: 'Delete file by URL or UUID' }) @ApiQuery({ name: 'type', enum: FileType, required: false }) async deleteFileByUrl( @Query('url') url: string, @Query('type') type?: FileType, ) { const result = await this.uploadcareService.deleteFileByUrl(url, type); return { message: 'File deleted successfully', ...result, }; } @Get('file-info') @ApiOperation({ summary: 'Get file information by UUID' }) @ApiQuery({ name: 'uuid', required: true, description: 'File UUID' }) @ApiQuery({ name: 'type', enum: FileType, required: false }) async getFileInfo( @Query('uuid') uuid: string, @Query('type') type?: FileType, ) { return this.uploadcareService.getFileInfoByUuid(uuid, type); } }