import { SchemaModel } from '@verb/src/libs/shared/base/base.model'; import { UserModel } from '@verb/src/libs/shared/base/user.model'; import { BASE_DEFINITIONS, BaseSchema, } from '@verb/src/libs/shared/json-schema-validator/schema-types'; import { OwnerModel, OwnerSchema, ownerValidationSchema, } from '@verb/src/libs/stream/host-metadata'; import { StreamMetadataModel, StreamMetadataSchema, streamMetadataValidationSchema, } from './stream-metadata.model'; export class StreamModel implements SchemaModel { public metadata = new StreamMetadataModel(); public owner = new OwnerModel(); public schemaVersion = 1; public streamId = 0; public constructor(streamSchema?: StreamSchema) { if (streamSchema) { this.fromSchema(streamSchema); } } public get streamInstanceId() { return this.metadata.streamInstanceId; } public set streamInstanceId(_streamInstanceId: string) { this.metadata.streamInstanceId = _streamInstanceId; } public fromSchema(streamSchema: StreamSchema) { this.metadata = new StreamMetadataModel(streamSchema.metadata); this.owner = new OwnerModel(streamSchema.owner); this.schemaVersion = streamSchema.schema_version; this.streamId = streamSchema.stream_id; this.streamInstanceId = streamSchema.stream_instance_id; } public toSchema(): StreamSchema { return { metadata: this.metadata.toSchema(), owner: this.owner.toSchema(), schema_version: this.schemaVersion, stream_id: this.streamId, stream_instance_id: this.streamInstanceId, }; } public isOwner(userModel: UserModel) { return userModel.clientId === this.owner.clientId && userModel.userId === this.owner.userId; } } export interface StreamSchema { metadata: StreamMetadataSchema; owner: OwnerSchema; schema_version: number; stream_id: number; stream_instance_id: string; } export const streamValidationSchema: BaseSchema = { $id: 'http://myverb.com/stream-metadata.schema.json', $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, definitions: BASE_DEFINITIONS, description: 'Validation Schema for Stream Configuration', properties: { metadata: streamMetadataValidationSchema, owner: ownerValidationSchema, schema_version: { description: 'Schema version', type: 'number', }, stream_id: { description: 'Stream id', type: 'number', }, }, required: ['metadata', 'owner', 'schema_version', 'stream_id'], title: 'Stream Schema', type: 'object', };