import { VideoSignatureModel } from '@verb/src/libs/security/signature/video-signature.model'; import { BaseModel } from '@verb/src/libs/shared/base/base.model'; import { MessageHasher } from '@verb/src/libs/shared/message-hasher/message-hasher.service'; import { VideoLocationData, VideoLocationModel } from './video-location.model'; export class VideoTranscodeModel implements BaseModel { public constructor( private readonly _messageHasher: MessageHasher, videoTranscodeData?: VideoTranscodeData, ) { if (videoTranscodeData) { this.fromSchema(videoTranscodeData); } } public get duration() { return this._duration; } public set duration(_duration) { this._duration = _duration; } public get height() { return this._height; } public set height(_height) { this._height = _height; } public get locations() { return this._locations; } public set locations(_locations) { this._locations = _locations; } public get signature() { return this._signature; } public get thumbnailUrl() { return this._thumbnailUrl; } public set thumbnailUrl(_thumbnailUrl) { this._thumbnailUrl = _thumbnailUrl; } public set videoId(_videoId: string) { this._signature.videoId = _videoId; } public get width() { return this._width; } public set width(_width) { this._width = _width; } public addVideoLocation(format: string, url: string) { const videoLocationModel = new VideoLocationModel(); videoLocationModel.format = format; videoLocationModel.url = url; this._locations.push(videoLocationModel); } public fromSchema(videoTranscodeData: VideoTranscodeData) { this._thumbnailUrl = videoTranscodeData.thumbnail_url; this._duration = videoTranscodeData.video_duration; this._height = videoTranscodeData.video_height; this._locations = []; this._signature = new VideoSignatureModel( this._messageHasher, videoTranscodeData.video_signature, ); this._width = videoTranscodeData.video_width; if (Array.isArray(videoTranscodeData.video_locations)) { videoTranscodeData.video_locations.forEach(videoLocationData => { const videoLocationModel = new VideoLocationModel(videoLocationData); this._locations.push(videoLocationModel); }); } } public toSchema(): VideoTranscodeData { const locations: VideoLocationData[] = []; if (Array.isArray(this._locations)) { this._locations.forEach(locationModel => { locations.push(locationModel.toSchema()); }); } return { thumbnail_url: this._thumbnailUrl, video_duration: this._duration, video_height: this._height, video_locations: locations, video_signature: this._signature.signature, video_width: this._width, }; } private _duration = 0; private _height = 0; private _locations: VideoLocationModel[] = []; private _signature = new VideoSignatureModel(this._messageHasher); private _thumbnailUrl = ''; private _width = 0; } export interface VideoTranscodeData { thumbnail_url: string; video_duration: number; video_height: number; video_signature: string; video_width: number; video_locations: VideoLocationData[]; }