From 1855755cd6f1c1c6d14e9429d89316741e21ae29 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Mon, 19 Jan 2026 11:48:57 +0100 Subject: [PATCH] backend: simplify update room methods to use merge for partial updates --- .../models/mongoose-schemas/room.schema.ts | 2 +- meet-ce/backend/src/services/room.service.ts | 28 ++++--------------- meet-ce/typings/src/recording.model.ts | 3 +- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts index f4cc56d7..c0a1e018 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts @@ -53,7 +53,7 @@ const MeetRecordingConfigSchema = new Schema( layout: { type: String, enum: Object.values(MeetRecordingLayout), - required: true + required: false } }, { _id: false } diff --git a/meet-ce/backend/src/services/room.service.ts b/meet-ce/backend/src/services/room.service.ts index 28b0bdc0..1e78c6ba 100644 --- a/meet-ce/backend/src/services/room.service.ts +++ b/meet-ce/backend/src/services/room.service.ts @@ -251,7 +251,7 @@ export class RoomService { * Updates the roles permissions of a specific meeting room. * * @param roomId - The unique identifier of the meeting room to update - * @param roles - The new roles permissions + * @param roles - Partial roles config with the fields to update * @returns A Promise that resolves to the updated MeetRoom object */ async updateMeetRoomRoles(roomId: string, roles: MeetRoomRolesConfig): Promise { @@ -261,19 +261,8 @@ export class RoomService { throw errorRoomActiveMeeting(roomId); } - if (roles.moderator) { - room.roles.moderator.permissions = { - ...room.roles.moderator.permissions, - ...roles.moderator.permissions - }; - } - - if (roles.speaker) { - room.roles.speaker.permissions = { - ...room.roles.speaker.permissions, - ...roles.speaker.permissions - }; - } + // Merge existing roles with new roles (partial update) + room.roles = merge({}, room.roles, roles); await this.roomRepository.update(room); return room; @@ -283,7 +272,7 @@ export class RoomService { * Updates the anonymous access configuration of a specific meeting room. * * @param roomId - The unique identifier of the meeting room to update - * @param anonymous - The new anonymous access configuration + * @param anonymous - Partial anonymous config with the fields to update * @returns A Promise that resolves to the updated MeetRoom object */ async updateMeetRoomAnonymous(roomId: string, anonymous: MeetRoomAnonymousConfig): Promise { @@ -293,13 +282,8 @@ export class RoomService { throw errorRoomActiveMeeting(roomId); } - if (anonymous.moderator) { - room.anonymous.moderator.enabled = anonymous.moderator.enabled; - } - - if (anonymous.speaker) { - room.anonymous.speaker.enabled = anonymous.speaker.enabled; - } + // Merge existing anonymous config with new anonymous config (partial update) + room.anonymous = merge({}, room.anonymous, anonymous); await this.roomRepository.update(room); return room; diff --git a/meet-ce/typings/src/recording.model.ts b/meet-ce/typings/src/recording.model.ts index f0e1f24f..60c263d7 100644 --- a/meet-ce/typings/src/recording.model.ts +++ b/meet-ce/typings/src/recording.model.ts @@ -9,10 +9,11 @@ export enum MeetRecordingStatus { ABORTED = 'aborted', LIMIT_REACHED = 'limit_reached' } + export enum MeetRecordingLayout { GRID = 'grid', SPEAKER = 'speaker', - SINGLE_SPEAKER = 'single-speaker', + SINGLE_SPEAKER = 'single-speaker' // GRID_LIGHT = 'grid-light', // SPEAKER_LIGHT = 'speaker-light', // SINGLE_SPEAKER_LIGHT = 'single-speaker-light'