diff --git a/src/client/client.controller.ts b/src/client/client.controller.ts index 96ab154..cf3c13d 100644 --- a/src/client/client.controller.ts +++ b/src/client/client.controller.ts @@ -54,7 +54,7 @@ export class ClientController { } @Patch(':id') - @Roles('manager') + @Roles('manager', 'technician', 'collector') async update( @CurrentUser() user: CurrentUserPayload, @Param('id') id: string, diff --git a/src/comment/comment.controller.ts b/src/comment/comment.controller.ts index cf45411..773160b 100644 --- a/src/comment/comment.controller.ts +++ b/src/comment/comment.controller.ts @@ -12,7 +12,6 @@ import { import { AuthGuard } from '@nestjs/passport'; import { FileFieldsInterceptor } from '@nestjs/platform-express'; import { CommentService } from './comment.service'; -import { CreateCommentDto } from './dto/create-comment.dto'; import { Roles } from '../common/decorators/roles.decorator'; import { RolesGuard } from '../common/guards/roles.guard'; import { TenantGuard } from '../common/guards/tenant.guard'; @@ -39,10 +38,12 @@ export class CommentController { async create( @CurrentUser() user: CurrentUserPayload, @Param('ticketId') ticketId: string, - @Body() body: CreateCommentDto, + @Body() body: any, @UploadedFiles() files?: { files?: Express.Multer.File[] }, ) { - const content = body.content; + let content = body?.content; + if (Array.isArray(content)) content = content[0]; + if (typeof content !== 'string') content = String(content ?? ''); if (!content || content.length > 50000) { throw new BadRequestException('Content must be between 1 and 50000 characters'); } diff --git a/src/common/multer/multer.config.ts b/src/common/multer/multer.config.ts index db9e6c3..7406021 100644 --- a/src/common/multer/multer.config.ts +++ b/src/common/multer/multer.config.ts @@ -1,12 +1,16 @@ import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface'; import { diskStorage } from 'multer'; -import { extname } from 'path'; +import { extname, resolve } from 'path'; +import { existsSync, mkdirSync } from 'fs'; import { Request } from 'express'; +const uploadDir = resolve('./uploads'); +if (!existsSync(uploadDir)) mkdirSync(uploadDir, { recursive: true }); + export const multerOptions: MulterOptions = { storage: diskStorage({ destination: (_req: Request, _file: Express.Multer.File, cb: (error: Error | null, destination: string) => void) => { - cb(null, './uploads'); + cb(null, uploadDir); }, filename: (_req: Request, file: Express.Multer.File, cb: (error: Error | null, filename: string) => void) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9); @@ -22,7 +26,6 @@ export const multerOptions: MulterOptions = { 'image/png', 'image/gif', 'image/webp', - 'application/pdf', ]; if (allowed.includes(file.mimetype)) { cb(null, true);