From 706fbb858a67bb396de35595efe30dff834feac8 Mon Sep 17 00:00:00 2001 From: Deki Akbar Date: Sun, 28 Jan 2024 07:27:28 +0700 Subject: [PATCH] add mimeType decoded as base64 and separate by hypen ('-') in internalCID --- src/file/service/file.service.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/file/service/file.service.ts b/src/file/service/file.service.ts index cbd411a..0d89983 100644 --- a/src/file/service/file.service.ts +++ b/src/file/service/file.service.ts @@ -46,7 +46,7 @@ export class FileService { const userFiles = await Promise.all( ipfsFiles.map(async (file) => { file.userId = user.id; - file.internalCid = this.generateInternalCid(); + file.internalCid = this.generateInternalCid(file.mimeType); return file; }), ); @@ -189,18 +189,33 @@ export class FileService { await file.destroy(); } - generateInternalCid(): string { + /** + * (Only use in nextJS frontend) + * Internal CID format : base64('mimeType')-randomString + * include mimeType in Internal CID to make frontend easy recognized the file, + * and know which media player should be rendered. + * + * @param mimeType mime type, i.e: vide/mp4 + * + * @returns {string} + */ + generateInternalCid(mimeType: string): string { + const separator = '-'; const length = this.configService.get('INTERNAL_CID_LENGTH'); const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; + let randomString = ''; for (let i = 0; i < length; i++) { - result += characters.charAt( + randomString += characters.charAt( Math.floor(Math.random() * characters.length), ); } + result = + Buffer.from(mimeType).toString('base64') + separator + randomString; + return result; }