diff --git a/BE/src/common/filters/websocket-exception.filter.ts b/BE/src/common/filters/websocket-exception.filter.ts new file mode 100644 index 00000000..349bfbdc --- /dev/null +++ b/BE/src/common/filters/websocket-exception.filter.ts @@ -0,0 +1,39 @@ +import { + ArgumentsHost, + Catch, + ExceptionFilter, + HttpStatus, + Logger, + InternalServerErrorException, +} from '@nestjs/common'; + +import { Request, Response } from 'express'; + +@Catch(InternalServerErrorException) +export class WebSocketExceptionFilter implements ExceptionFilter { + private readonly logger = new Logger(WebSocketExceptionFilter.name); + + catch(exception: InternalServerErrorException, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + + const request = ctx.getRequest(); + const response = ctx.getResponse(); + + const status = HttpStatus.INTERNAL_SERVER_ERROR; + + const { message } = exception; + + const errorResponse = { + statusCode: status, + message, + timestamp: new Date().toISOString(), + path: request.url, + }; + + this.logger.error( + `[${request.method}] ${request.url} - Status: ${status} - Error: ${exception.message}`, + ); + + response.status(status).json(errorResponse); + } +} diff --git a/BE/src/common/websocket/socket.gateway.ts b/BE/src/common/websocket/socket.gateway.ts index d533c3f0..b898fda1 100644 --- a/BE/src/common/websocket/socket.gateway.ts +++ b/BE/src/common/websocket/socket.gateway.ts @@ -1,8 +1,10 @@ import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets'; import { Server } from 'socket.io'; -import { Logger } from '@nestjs/common'; +import { Logger, UseFilters } from '@nestjs/common'; +import { WebSocketExceptionFilter } from '../filters/websocket-exception.filter'; @WebSocketGateway({ namespace: 'socket', cors: { origin: '*' } }) +@UseFilters(new WebSocketExceptionFilter()) export class SocketGateway { @WebSocketServer() private server: Server;