import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UploadedFiles, UseGuards, UseInterceptors, } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; import { memoryStorage } from 'multer'; import { AuthUser } from '../auth/auth.types'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import { RequireBusinessPermission } from '../auth/decorators/require-business-permission.decorator'; import { BusinessPermissionGuard } from '../auth/guards/business-permission.guard'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { ListMediaDto } from './dto/list-media.dto'; import { UpdateMediaDto } from './dto/update-media.dto'; import { MediaService } from './media.service'; @Controller('businesses/:businessId/media') @UseGuards(JwtAuthGuard, BusinessPermissionGuard) export class MediaController { constructor(private readonly mediaService: MediaService) {} @Get() @RequireBusinessPermission('media.read') list( @Param('businessId') businessId: string, @Query() query: ListMediaDto, @CurrentUser() user: AuthUser, ) { return this.mediaService.list(businessId, query, user); } @Post() @RequireBusinessPermission('media.create') @UseInterceptors( FilesInterceptor('files', 20, { storage: memoryStorage(), }), ) upload( @Param('businessId') businessId: string, @UploadedFiles() files: Express.Multer.File[], @CurrentUser() user: AuthUser, ) { return this.mediaService.uploadMany(businessId, files ?? [], user); } @Patch(':mediaId') @RequireBusinessPermission('media.update') update( @Param('businessId') businessId: string, @Param('mediaId') mediaId: string, @Body() dto: UpdateMediaDto, @CurrentUser() user: AuthUser, ) { return this.mediaService.update(businessId, mediaId, dto, user); } @Delete(':mediaId') @RequireBusinessPermission('media.delete') remove( @Param('businessId') businessId: string, @Param('mediaId') mediaId: string, @CurrentUser() user: AuthUser, ) { return this.mediaService.remove(businessId, mediaId, user); } }