import { Body, Controller, Delete, Get, Param, 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 { AddGalleryDto, ListGalleryDto } from './dto/gallery.dto'; import { GalleryService } from './gallery.service'; @Controller('businesses/:businessId/gallery') @UseGuards(JwtAuthGuard, BusinessPermissionGuard) export class GalleryController { constructor(private readonly galleryService: GalleryService) {} @Get() @RequireBusinessPermission('media.read') list( @Param('businessId') businessId: string, @Query() query: ListGalleryDto, @CurrentUser() user: AuthUser, ) { return this.galleryService.list(businessId, query, user); } @Post() @RequireBusinessPermission('media.create') @UseInterceptors( FilesInterceptor('files', 20, { storage: memoryStorage(), }), ) add( @Param('businessId') businessId: string, @UploadedFiles() files: Express.Multer.File[], @Body() dto: AddGalleryDto, @CurrentUser() user: AuthUser, ) { return this.galleryService.add( businessId, { files: files ?? [], dto }, user, ); } @Delete(':mediaId') @RequireBusinessPermission('media.delete') remove( @Param('businessId') businessId: string, @Param('mediaId') mediaId: string, @CurrentUser() user: AuthUser, ) { return this.galleryService.remove(businessId, mediaId, user); } }