diff --git a/meet-ce/backend/src/models/mongoose-schemas/api-key.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/api-key.schema.ts index 1f53380c..95b7a98e 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/api-key.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/api-key.schema.ts @@ -1,6 +1,7 @@ import { MeetApiKey } from '@openvidu-meet/typings'; import { model, Schema } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; /** @@ -9,6 +10,19 @@ import { SchemaMigratableDocument } from '../migration.model.js'; */ export interface MeetApiKeyDocument extends MeetApiKey, SchemaMigratableDocument {} +/** + * Type for fields in MeetApiKeyDocument that are not present in MeetApiKey domain model. + */ +export type MeetApiKeyDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetApiKeyDocument and not in the MeetApiKey domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetApiKeyDocument interface + */ +export const MEET_API_KEY_DOCUMENT_ONLY_FIELDS = [ + 'schemaVersion' +] as const satisfies readonly MeetApiKeyDocumentOnlyField[]; + /** * Mongoose schema for MeetApiKey entity. * Defines the structure and validation rules for API key documents in MongoDB. diff --git a/meet-ce/backend/src/models/mongoose-schemas/global-config.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/global-config.schema.ts index 7d6d8158..c7488558 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/global-config.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/global-config.schema.ts @@ -1,8 +1,9 @@ import { GlobalConfig, OAuthProvider } from '@openvidu-meet/typings'; import { model, Schema } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; -import { MeetAppearanceConfigSchema } from './room.schema.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; +import { MeetAppearanceConfigSchema } from './room.schema.js'; /** * Mongoose Document interface for global config. @@ -10,6 +11,19 @@ import { SchemaMigratableDocument } from '../migration.model.js'; */ export interface MeetGlobalConfigDocument extends GlobalConfig, SchemaMigratableDocument {} +/** + * Type for fields in MeetGlobalConfigDocument that are not present in GlobalConfig domain model. + */ +export type MeetGlobalConfigDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetGlobalConfigDocument and not in the GlobalConfig domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetGlobalConfigDocument interface + */ +export const MEET_GLOBAL_CONFIG_DOCUMENT_ONLY_FIELDS = [ + 'schemaVersion' +] as const satisfies readonly MeetGlobalConfigDocumentOnlyField[]; + /** * Sub-schema for OAuth provider configuration. */ diff --git a/meet-ce/backend/src/models/mongoose-schemas/recording.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/recording.schema.ts index 1256da0f..5d6229f5 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/recording.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/recording.schema.ts @@ -1,6 +1,7 @@ import { MeetRecordingInfo, MeetRecordingLayout, MeetRecordingStatus } from '@openvidu-meet/typings'; import { model, Schema } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; /** @@ -15,6 +16,20 @@ export interface MeetRecordingDocument extends MeetRecordingInfo, SchemaMigratab }; } +/** + * Type for fields in MeetRecordingDocument that are not present in MeetRecordingInfo domain model. + */ +export type MeetRecordingDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetRecordingDocument and not in the MeetRecordingInfo domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetRecordingDocument interface + */ +export const MEET_RECORDING_DOCUMENT_ONLY_FIELDS = [ + 'schemaVersion', + 'accessSecrets' +] as const satisfies readonly MeetRecordingDocumentOnlyField[]; + /** * Mongoose schema for MeetRecordingInfo entity. * Defines the structure and validation rules for recording documents in MongoDB. diff --git a/meet-ce/backend/src/models/mongoose-schemas/room-member.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/room-member.schema.ts index 080dfe70..2778d285 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/room-member.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/room-member.schema.ts @@ -1,6 +1,7 @@ import { MeetRoomMember, MeetRoomMemberRole } from '@openvidu-meet/typings'; import { Schema, model } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; /** @@ -9,6 +10,19 @@ import { SchemaMigratableDocument } from '../migration.model.js'; */ export interface MeetRoomMemberDocument extends MeetRoomMember, SchemaMigratableDocument {} +/** + * Type for fields in MeetRoomMemberDocument that are not present in MeetRoomMember domain model. + */ +export type MeetRoomMemberDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetRoomMemberDocument and not in the MeetRoomMember domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetRoomMemberDocument interface + */ +export const MEET_ROOM_MEMBER_DOCUMENT_ONLY_FIELDS = [ + 'schemaVersion' +] as const satisfies readonly MeetRoomMemberDocumentOnlyField[]; + const permissionFields = { canRecord: { type: Boolean }, canRetrieveRecordings: { type: Boolean }, 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 6c9f85cb..5e226f34 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/room.schema.ts @@ -9,8 +9,9 @@ import { } from '@openvidu-meet/typings'; import { Schema, model } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; -import { MeetRoomMemberPermissionsSchema } from './room-member.schema.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; +import { MeetRoomMemberPermissionsSchema } from './room-member.schema.js'; /** * Mongoose Document interface for rooms. @@ -18,6 +19,17 @@ import { SchemaMigratableDocument } from '../migration.model.js'; */ export interface MeetRoomDocument extends MeetRoom, SchemaMigratableDocument {} +/** + * Type for fields in MeetRoomDocument that are not present in MeetRoom domain model. + */ +export type MeetRoomDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetRoomDocument and not in the MeetRoom domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetRoomDocument interface + */ +export const MEET_ROOM_DOCUMENT_ONLY_FIELDS = ['schemaVersion'] as const satisfies readonly MeetRoomDocumentOnlyField[]; + /** * Sub-schema for auto-deletion policy. */ diff --git a/meet-ce/backend/src/models/mongoose-schemas/user.schema.ts b/meet-ce/backend/src/models/mongoose-schemas/user.schema.ts index 71f95124..608f103e 100644 --- a/meet-ce/backend/src/models/mongoose-schemas/user.schema.ts +++ b/meet-ce/backend/src/models/mongoose-schemas/user.schema.ts @@ -1,6 +1,7 @@ import { MeetUser, MeetUserRole } from '@openvidu-meet/typings'; import { model, Schema } from 'mongoose'; import { INTERNAL_CONFIG } from '../../config/internal-config.js'; +import { DocumentOnlyField } from '../database.model.js'; import { SchemaMigratableDocument } from '../migration.model.js'; /** @@ -9,6 +10,17 @@ import { SchemaMigratableDocument } from '../migration.model.js'; */ export interface MeetUserDocument extends MeetUser, SchemaMigratableDocument {} +/** + * Type for fields in MeetUserDocument that are not present in MeetUser domain model. + */ +export type MeetUserDocumentOnlyField = DocumentOnlyField; + +/** + * List of fields that exist only in the MeetUserDocument and not in the MeetUser domain model. + * IMPORTANT: Update this list if new document-only fields are added to the MeetUserDocument interface + */ +export const MEET_USER_DOCUMENT_ONLY_FIELDS = ['schemaVersion'] as const satisfies readonly MeetUserDocumentOnlyField[]; + /** * Mongoose schema for MeetUser entity. * Defines the structure and validation rules for user documents in MongoDB. diff --git a/meet-ce/backend/src/repositories/api-key.repository.ts b/meet-ce/backend/src/repositories/api-key.repository.ts index fb5ac3c8..35e349aa 100644 --- a/meet-ce/backend/src/repositories/api-key.repository.ts +++ b/meet-ce/backend/src/repositories/api-key.repository.ts @@ -2,7 +2,12 @@ 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 { + MEET_API_KEY_DOCUMENT_ONLY_FIELDS, + MeetApiKeyDocument, + MeetApiKeyDocumentOnlyField, + MeetApiKeyModel +} from '../models/mongoose-schemas/api-key.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -21,6 +26,10 @@ export class ApiKeyRepository extends BaseRepository { return this.enrichRoomWithBaseUrls(room as MeetRoom); } + protected override getDocumentOnlyFields(): readonly MeetRoomDocumentOnlyField[] { + return MEET_ROOM_DOCUMENT_ONLY_FIELDS; + } + /** * Creates a new room. * URLs are stored in the database without the base URL. diff --git a/meet-ce/backend/src/repositories/user.repository.ts b/meet-ce/backend/src/repositories/user.repository.ts index c6656529..294d38da 100644 --- a/meet-ce/backend/src/repositories/user.repository.ts +++ b/meet-ce/backend/src/repositories/user.repository.ts @@ -2,7 +2,12 @@ import { MeetUser, MeetUserFilters, SortOrder } from '@openvidu-meet/typings'; import { inject, injectable } from 'inversify'; 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 { + MEET_USER_DOCUMENT_ONLY_FIELDS, + MeetUserDocument, + MeetUserDocumentOnlyField, + MeetUserModel +} from '../models/mongoose-schemas/user.schema.js'; import { LoggerService } from '../services/logger.service.js'; import { BaseRepository } from './base.repository.js'; @@ -22,6 +27,10 @@ export class UserRepository extends BaseRepository { return user as MeetUser; } + protected override getDocumentOnlyFields(): readonly MeetUserDocumentOnlyField[] { + return MEET_USER_DOCUMENT_ONLY_FIELDS; + } + /** * Creates a new user. *