backend: Add meeting controller with endMeeting functionality

This commit is contained in:
juancarmore 2025-04-12 12:59:59 +02:00
parent 9fb281626d
commit 2ae88d28b6
2 changed files with 35 additions and 0 deletions

View File

@ -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';

View File

@ -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'
});
}
};