diff --git a/backend/src/services/recording.service.ts b/backend/src/services/recording.service.ts index 46c5c84..678a302 100644 --- a/backend/src/services/recording.service.ts +++ b/backend/src/services/recording.service.ts @@ -363,11 +363,13 @@ export class RecordingService { // Retrieve the metadata for each recording Contents.forEach((item) => { if (item?.Key && item.Key.endsWith('.json') && !item.Key.endsWith('secrets.json')) { - promises.push(this.s3Service.getObjectAsJson(item.Key) as Promise); + promises.push( + this.storageService.getRecordingMetadataByPath(item.Key) as Promise + ); } }); - let recordings: MeetRecordingInfo[] = await Promise.all(promises); + let recordings = await Promise.all(promises); recordings = recordings.map((rec) => UtilsHelper.filterObjectFields(rec, fields)) as MeetRecordingInfo[]; diff --git a/backend/src/services/storage/providers/s3-storage.provider.ts b/backend/src/services/storage/providers/s3-storage.provider.ts index 3d81186..460c1f1 100644 --- a/backend/src/services/storage/providers/s3-storage.provider.ts +++ b/backend/src/services/storage/providers/s3-storage.provider.ts @@ -437,6 +437,24 @@ export class S3StorageProvider< } } + /** + * Retrieves recording metadata from S3 storage by the specified path. + * + * @param recordingPath - The S3 path where the recording metadata is stored + * @returns A promise that resolves to the recording metadata object + * @throws Will throw an error if the S3 object retrieval fails or if the path is invalid + */ + async getRecordingMetadataByPath(recordingPath: string): Promise { + try { + return await this.s3Service.getObjectAsJson(recordingPath) as MRec; + } catch (error) { + this.handleError(error, `Error fetching recording metadata for path ${recordingPath}`); + throw error; + + } + } + + async saveRecordingMetadata(recordingInfo: MRec): Promise { try { const metadataPath = RecordingHelper.buildMetadataFilePath(recordingInfo.recordingId); diff --git a/backend/src/services/storage/storage.interface.ts b/backend/src/services/storage/storage.interface.ts index 11e0109..3ea4318 100644 --- a/backend/src/services/storage/storage.interface.ts +++ b/backend/src/services/storage/storage.interface.ts @@ -143,6 +143,14 @@ export interface StorageProvider< */ getRecordingMetadata(recordingId: string): Promise<{ recordingInfo: MRec; metadataFilePath: string }>; + /** + * Retrieves the recording metadata for multiple recording IDs. + * + * @param recordingPath - The path of the recording file to retrieve metadata for. + * @returns A promise that resolves to the recording metadata, or null if not found. + */ + getRecordingMetadataByPath(recordingPath: string): Promise; + /** * Deletes multiple recording metadata files by their paths. * diff --git a/backend/src/services/storage/storage.service.ts b/backend/src/services/storage/storage.service.ts index 97a43f0..53ce5a2 100644 --- a/backend/src/services/storage/storage.service.ts +++ b/backend/src/services/storage/storage.service.ts @@ -215,6 +215,13 @@ export class MeetStorageService< return this.storageProvider.saveRecordingMetadata(recordingInfo) as Promise; } + /** + * Retrieves the metadata for a specific recording. + * + * @param recordingId - The unique identifier of the recording + * @returns A promise that resolves to an object containing the recording information and metadata file path + * @throws May throw an error if the recording is not found or if there's an issue accessing the storage provider + */ async getRecordingMetadata(recordingId: string): Promise<{ recordingInfo: MRec; metadataFilePath: string }> { return this.storageProvider.getRecordingMetadata(recordingId) as Promise<{ recordingInfo: MRec; @@ -222,6 +229,16 @@ export class MeetStorageService< }>; } + /** + * Retrieves metadata for recordings by their file path. + * + * @param recordingPath - The path of the recording file to retrieve metadata for + * @returns A promise that resolves to + */ + async getRecordingMetadataByPath(recordingPath: string): Promise { + return this.storageProvider.getRecordingMetadataByPath(recordingPath) as Promise; + } + /** * Retrieves recording media as a readable stream from the storage provider. *