From cae5a58568b8516d39e6a428e340f05f9135e91f Mon Sep 17 00:00:00 2001 From: juancarmore Date: Tue, 24 Feb 2026 20:17:14 +0100 Subject: [PATCH] backend: integrate schema versioning into create methods across repositories --- .../backend/src/repositories/api-key.repository.ts | 7 ++++++- .../src/repositories/global-config.repository.ts | 7 ++++++- .../src/repositories/recording.repository.ts | 13 +++++++------ .../src/repositories/room-member.repository.ts | 11 ++++++++--- meet-ce/backend/src/repositories/room.repository.ts | 11 ++++++++--- meet-ce/backend/src/repositories/user.repository.ts | 11 ++++++++--- 6 files changed, 43 insertions(+), 17 deletions(-) diff --git a/meet-ce/backend/src/repositories/api-key.repository.ts b/meet-ce/backend/src/repositories/api-key.repository.ts index bcd5ce7c..fb5ac3c8 100644 --- a/meet-ce/backend/src/repositories/api-key.repository.ts +++ b/meet-ce/backend/src/repositories/api-key.repository.ts @@ -1,6 +1,7 @@ import { MeetApiKey } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; import { Require_id } from 'mongoose'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetApiKeyDocument, MeetApiKeyModel } from '../models/mongoose-schemas/api-key.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -24,7 +25,11 @@ export class ApiKeyRepository extends BaseRepository { - return this.createDocument(apiKey); + const document: MeetApiKeyDocument = { + ...apiKey, + schemaVersion: INTERNAL_CONFIG.API_KEY_SCHEMA_VERSION + }; + return this.createDocument(document); } /** diff --git a/meet-ce/backend/src/repositories/global-config.repository.ts b/meet-ce/backend/src/repositories/global-config.repository.ts index 16e1356f..de68219a 100644 --- a/meet-ce/backend/src/repositories/global-config.repository.ts +++ b/meet-ce/backend/src/repositories/global-config.repository.ts @@ -1,6 +1,7 @@ import { GlobalConfig } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; import { Require_id } from 'mongoose'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetGlobalConfigDocument, MeetGlobalConfigModel } from '../models/mongoose-schemas/global-config.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -33,7 +34,11 @@ export class GlobalConfigRepository extends BaseRepository { - return this.createDocument(config); + const document: MeetGlobalConfigDocument = { + ...config, + schemaVersion: INTERNAL_CONFIG.GLOBAL_CONFIG_SCHEMA_VERSION + }; + return this.createDocument(document); } /** diff --git a/meet-ce/backend/src/repositories/recording.repository.ts b/meet-ce/backend/src/repositories/recording.repository.ts index 490b7022..2ae8fdda 100644 --- a/meet-ce/backend/src/repositories/recording.repository.ts +++ b/meet-ce/backend/src/repositories/recording.repository.ts @@ -6,8 +6,9 @@ import { SortOrder } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; -import { FilterQuery, Require_id } from 'mongoose'; +import { QueryFilter, Require_id } from 'mongoose'; import { uid as secureUid } from 'uid/secure'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetRecordingDocument, MeetRecordingModel } from '../models/mongoose-schemas/recording.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -35,15 +36,15 @@ export class RecordingRepository extends BaseRepository { - // Generate access secrets - const recordingDoc: Omit = { + const document: MeetRecordingDocument = { ...recording, accessSecrets: { public: secureUid(10), private: secureUid(10) - } + }, + schemaVersion: INTERNAL_CONFIG.RECORDING_SCHEMA_VERSION }; - return this.createDocument(recordingDoc); + return this.createDocument(document); } /** @@ -105,7 +106,7 @@ export class RecordingRepository extends BaseRepository = {}; + const filter: QueryFilter = {}; if (roomIds) { // Filter by multiple room IDs diff --git a/meet-ce/backend/src/repositories/room-member.repository.ts b/meet-ce/backend/src/repositories/room-member.repository.ts index 654ae9a2..70ba8ed2 100644 --- a/meet-ce/backend/src/repositories/room-member.repository.ts +++ b/meet-ce/backend/src/repositories/room-member.repository.ts @@ -1,6 +1,7 @@ import { MeetRoomMember, MeetRoomMemberFilters, MeetRoomMemberPermissions, SortOrder } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; -import { FilterQuery, Require_id } from 'mongoose'; +import { QueryFilter, Require_id } from 'mongoose'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetRoomMemberDocument, MeetRoomMemberModel } from '../models/mongoose-schemas/room-member.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -28,7 +29,11 @@ export class RoomMemberRepository extends BaseRepository { - return this.createDocument(member); + const document: MeetRoomMemberDocument = { + ...member, + schemaVersion: INTERNAL_CONFIG.ROOM_MEMBER_SCHEMA_VERSION + }; + return this.createDocument(document); } /** @@ -128,7 +133,7 @@ export class RoomMemberRepository extends BaseRepository = { roomId }; + const filter: QueryFilter = { roomId }; if (name) { filter.name = new RegExp(name, 'i'); diff --git a/meet-ce/backend/src/repositories/room.repository.ts b/meet-ce/backend/src/repositories/room.repository.ts index 5c129594..2c3e4b4a 100644 --- a/meet-ce/backend/src/repositories/room.repository.ts +++ b/meet-ce/backend/src/repositories/room.repository.ts @@ -1,6 +1,7 @@ import { MeetRoom, MeetRoomField, MeetRoomFilters, MeetRoomStatus, SortOrder } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; -import { FilterQuery, Require_id } from 'mongoose'; +import { QueryFilter, Require_id } from 'mongoose'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetRoomDocument, MeetRoomModel } from '../models/mongoose-schemas/room.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { getBasePath } from '../utils/html-dynamic-base-path.utils.js'; @@ -39,7 +40,11 @@ export class RoomRepository extends BaseRepository { */ async create(room: MeetRoom): Promise { const normalizedRoom = this.normalizeRoomForStorage(room); - return this.createDocument(normalizedRoom); + const document: MeetRoomDocument = { + ...normalizedRoom, + schemaVersion: INTERNAL_CONFIG.ROOM_SCHEMA_VERSION + }; + return this.createDocument(document); } /** @@ -128,7 +133,7 @@ export class RoomRepository extends BaseRepository { } = options; // Build base filter - const filter: FilterQuery = {}; + const filter: QueryFilter = {}; // Handle owner and roomIds with $or when both are present if (owner && roomIds) { diff --git a/meet-ce/backend/src/repositories/user.repository.ts b/meet-ce/backend/src/repositories/user.repository.ts index 6bf613b0..c6656529 100644 --- a/meet-ce/backend/src/repositories/user.repository.ts +++ b/meet-ce/backend/src/repositories/user.repository.ts @@ -1,6 +1,7 @@ import { MeetUser, MeetUserFilters, SortOrder } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; -import { FilterQuery, Require_id } from 'mongoose'; +import { QueryFilter, Require_id } from 'mongoose'; +import { INTERNAL_CONFIG } from '../config/internal-config.js'; import { MeetUserDocument, MeetUserModel } from '../models/mongoose-schemas/user.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -28,7 +29,11 @@ export class UserRepository extends BaseRepository { * @returns The created user */ async create(user: MeetUser): Promise { - return this.createDocument(user); + const document: MeetUserDocument = { + ...user, + schemaVersion: INTERNAL_CONFIG.USER_SCHEMA_VERSION + }; + return this.createDocument(document); } /** @@ -91,7 +96,7 @@ export class UserRepository extends BaseRepository { } = options; // Build base filter - const filter: FilterQuery = {}; + const filter: QueryFilter = {}; if (userId && name) { // Both defined: OR filter with regex userId match and regex name match