backend: add document-only fields and types for various schemas and repositories
This commit is contained in:
parent
09ac408f32
commit
8e5c07710b
@ -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<MeetApiKeyDocument, MeetApiKey>;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
||||
@ -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<MeetGlobalConfigDocument, GlobalConfig>;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@ -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<MeetRecordingDocument, MeetRecordingInfo>;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
||||
@ -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<MeetRoomMemberDocument, MeetRoomMember>;
|
||||
|
||||
/**
|
||||
* 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 },
|
||||
|
||||
@ -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<MeetRoomDocument, MeetRoom>;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@ -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<MeetUserDocument, MeetUser>;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
||||
@ -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<MeetApiKey, MeetApiKeyDocum
|
||||
return apiKey as MeetApiKey;
|
||||
}
|
||||
|
||||
protected override getDocumentOnlyFields(): readonly MeetApiKeyDocumentOnlyField[] {
|
||||
return MEET_API_KEY_DOCUMENT_ONLY_FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new API key.
|
||||
*/
|
||||
|
||||
@ -2,7 +2,12 @@ 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 {
|
||||
MEET_GLOBAL_CONFIG_DOCUMENT_ONLY_FIELDS,
|
||||
MeetGlobalConfigDocument,
|
||||
MeetGlobalConfigDocumentOnlyField,
|
||||
MeetGlobalConfigModel
|
||||
} from '../models/mongoose-schemas/global-config.schema.js';
|
||||
import { LoggerService } from '../services/logger.service.js';
|
||||
import { BaseRepository } from './base.repository.js';
|
||||
|
||||
@ -24,6 +29,10 @@ export class GlobalConfigRepository extends BaseRepository<GlobalConfig, MeetGlo
|
||||
return globalConfig as GlobalConfig;
|
||||
}
|
||||
|
||||
protected override getDocumentOnlyFields(): readonly MeetGlobalConfigDocumentOnlyField[] {
|
||||
return MEET_GLOBAL_CONFIG_DOCUMENT_ONLY_FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the global configuration document.
|
||||
*
|
||||
|
||||
@ -9,7 +9,12 @@ import { inject, injectable } from 'inversify';
|
||||
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 {
|
||||
MEET_RECORDING_DOCUMENT_ONLY_FIELDS,
|
||||
MeetRecordingDocument,
|
||||
MeetRecordingDocumentOnlyField,
|
||||
MeetRecordingModel
|
||||
} from '../models/mongoose-schemas/recording.schema.js';
|
||||
import { LoggerService } from '../services/logger.service.js';
|
||||
import { BaseRepository } from './base.repository.js';
|
||||
|
||||
@ -29,6 +34,10 @@ export class RecordingRepository extends BaseRepository<MeetRecordingInfo, MeetR
|
||||
return recording as MeetRecordingInfo;
|
||||
}
|
||||
|
||||
protected override getDocumentOnlyFields(): readonly MeetRecordingDocumentOnlyField[] {
|
||||
return MEET_RECORDING_DOCUMENT_ONLY_FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new recording with generated access secrets.
|
||||
*
|
||||
|
||||
@ -2,7 +2,12 @@ import { MeetRoomMember, MeetRoomMemberFilters, MeetRoomMemberPermissions, SortO
|
||||
import { inject, injectable } from 'inversify';
|
||||
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 {
|
||||
MEET_ROOM_MEMBER_DOCUMENT_ONLY_FIELDS,
|
||||
MeetRoomMemberDocument,
|
||||
MeetRoomMemberDocumentOnlyField,
|
||||
MeetRoomMemberModel
|
||||
} from '../models/mongoose-schemas/room-member.schema.js';
|
||||
import { LoggerService } from '../services/logger.service.js';
|
||||
import { BaseRepository } from './base.repository.js';
|
||||
|
||||
@ -22,6 +27,10 @@ export class RoomMemberRepository extends BaseRepository<MeetRoomMember, MeetRoo
|
||||
return member as MeetRoomMember;
|
||||
}
|
||||
|
||||
protected override getDocumentOnlyFields(): readonly MeetRoomMemberDocumentOnlyField[] {
|
||||
return MEET_ROOM_MEMBER_DOCUMENT_ONLY_FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a member to a room.
|
||||
*
|
||||
|
||||
@ -2,7 +2,12 @@ import { MeetRoom, MeetRoomField, MeetRoomFilters, MeetRoomStatus, SortOrder } f
|
||||
import { inject, injectable } from 'inversify';
|
||||
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 {
|
||||
MEET_ROOM_DOCUMENT_ONLY_FIELDS,
|
||||
MeetRoomDocument,
|
||||
MeetRoomDocumentOnlyField,
|
||||
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';
|
||||
import { getBaseUrl } from '../utils/url.utils.js';
|
||||
@ -31,6 +36,10 @@ export class RoomRepository extends BaseRepository<MeetRoom, MeetRoomDocument> {
|
||||
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.
|
||||
|
||||
@ -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<MeetUser, MeetUserDocument> {
|
||||
return user as MeetUser;
|
||||
}
|
||||
|
||||
protected override getDocumentOnlyFields(): readonly MeetUserDocumentOnlyField[] {
|
||||
return MEET_USER_DOCUMENT_ONLY_FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new user.
|
||||
*
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user