From a17bcd5771793276c9ed8e7ce59d4b53b9c82d44 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Mon, 7 Apr 2025 19:33:38 +0200 Subject: [PATCH] backend: Add error handling for starting recordings when no participants are present --- backend/src/models/error.model.ts | 4 ++++ backend/src/services/recording.service.ts | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/backend/src/models/error.model.ts b/backend/src/models/error.model.ts index a329c45..25cac1e 100644 --- a/backend/src/models/error.model.ts +++ b/backend/src/models/error.model.ts @@ -75,6 +75,10 @@ export const errorRecordingAlreadyStarted = (roomId: string): OpenViduMeetError return new OpenViduMeetError('Recording Error', `The room '${roomId}' is already being recorded`, 409); }; +export const errorRoomHasNoParticipants = (roomId: string): OpenViduMeetError => { + return new OpenViduMeetError('Recording Error', `The room '${roomId}' has no participants`, 409); +}; + const isMatchingError = (error: OpenViduMeetError, originalError: OpenViduMeetError): boolean => { return ( error instanceof OpenViduMeetError && diff --git a/backend/src/services/recording.service.ts b/backend/src/services/recording.service.ts index d10886c..99b62a0 100644 --- a/backend/src/services/recording.service.ts +++ b/backend/src/services/recording.service.ts @@ -9,6 +9,7 @@ import { errorRecordingCannotBeStoppedWhileStarting, errorRecordingNotFound, errorRecordingNotStopped, + errorRoomHasNoParticipants, errorRoomNotFound, internalError, isErrorRecordingAlreadyStopped, @@ -68,6 +69,11 @@ export class RecordingService { //TODO: Check if the room has participants before starting the recording //room.numParticipants === 0 ? throw errorNoParticipants(roomId); + const lkRoom = await this.livekitService.getRoom(roomId); + + if (!lkRoom) throw errorRoomNotFound(roomId); + + if (lkRoom.numParticipants === 0) throw errorRoomHasNoParticipants(roomId); // Attempt to acquire lock. If the lock is not acquired, the recording is already active. acquiredLock = await this.acquireRoomRecordingActiveLock(roomId);