import { AssetEntity, AssetType } from '@app/infra/db/entities'; import { Inject } from '@nestjs/common'; import { IAssetUploadedJob, IJobRepository, JobName } from '../job'; import { ISearchRepository } from '../search'; import { AssetCore } from './asset.core'; import { IAssetRepository } from './asset.repository'; export class AssetService { private assetCore: AssetCore; constructor( @Inject(IAssetRepository) assetRepository: IAssetRepository, @Inject(IJobRepository) private jobRepository: IJobRepository, @Inject(ISearchRepository) searchRepository: ISearchRepository, ) { this.assetCore = new AssetCore(assetRepository, searchRepository); } async handleAssetUpload(data: IAssetUploadedJob) { await this.jobRepository.queue({ name: JobName.GENERATE_JPEG_THUMBNAIL, data }); if (data.asset.type == AssetType.VIDEO) { await this.jobRepository.queue({ name: JobName.VIDEO_CONVERSION, data }); await this.jobRepository.queue({ name: JobName.EXTRACT_VIDEO_METADATA, data }); } else { await this.jobRepository.queue({ name: JobName.EXIF_EXTRACTION, data }); } } save(asset: Partial) { return this.assetCore.save(asset); } }