From 2ae88d28b631f53de758b701413a9b3e713feafc Mon Sep 17 00:00:00 2001 From: juancarmore Date: Sat, 12 Apr 2025 12:59:59 +0200 Subject: [PATCH] backend: Add meeting controller with endMeeting functionality --- backend/src/controllers/index.ts | 1 + backend/src/controllers/meeting.controller.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 backend/src/controllers/meeting.controller.ts diff --git a/backend/src/controllers/index.ts b/backend/src/controllers/index.ts index 904cff8..1e8e314 100644 --- a/backend/src/controllers/index.ts +++ b/backend/src/controllers/index.ts @@ -1,6 +1,7 @@ export * from './auth.controller.js'; export * from './recording.controller.js'; export * from './room.controller.js'; +export * from './meeting.controller.js'; export * from './participant.controller.js'; export * from './livekit-webhook.controller.js'; diff --git a/backend/src/controllers/meeting.controller.ts b/backend/src/controllers/meeting.controller.ts new file mode 100644 index 0000000..7f11352 --- /dev/null +++ b/backend/src/controllers/meeting.controller.ts @@ -0,0 +1,34 @@ +import { container } from '../config/dependency-injector.config.js'; +import { Request, Response } from 'express'; +import { LoggerService } from '../services/logger.service.js'; +import { OpenViduMeetError } from '../models/index.js'; +import { LiveKitService } from '../services/livekit.service.js'; + +export const endMeeting = async (req: Request, res: Response) => { + const logger = container.get(LoggerService); + const livekitService = container.get(LiveKitService); + const { roomId } = req.params; + + try { + // To end a meeting, we need to delete the room from LiveKit + await livekitService.deleteRoom(roomId); + res.status(200).json({ message: 'Meeting ended successfully' }); + } catch (error) { + logger.error(`Error ending meeting from room: ${roomId}`); + return handleError(res, error); + } +}; + +const handleError = (res: Response, error: OpenViduMeetError | unknown) => { + const logger = container.get(LoggerService); + logger.error(String(error)); + + if (error instanceof OpenViduMeetError) { + res.status(error.statusCode).json({ name: error.name, message: error.message }); + } else { + res.status(500).json({ + name: 'Meeting Error', + message: 'Internal server error. Meeting operation failed' + }); + } +};