From 4772c320ba976c040b16cbda87e9719338ec90a6 Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Tue, 2 Dec 2025 17:53:19 +0530 Subject: [PATCH] Enhance HostService and MinglarService to include account manager details and process profile images. Updated getAllHostActivity to retrieve account manager information and generate presigned URLs for media and profile images. Refactored media processing logic for improved clarity and consistency. --- src/modules/host/services/host.service.ts | 85 ++++++++++++++++++- .../minglaradmin/services/minglar.service.ts | 42 +++++---- 2 files changed, 105 insertions(+), 22 deletions(-) diff --git a/src/modules/host/services/host.service.ts b/src/modules/host/services/host.service.ts index f3cfa84..d97d0f9 100644 --- a/src/modules/host/services/host.service.ts +++ b/src/modules/host/services/host.service.ts @@ -102,6 +102,17 @@ export class HostService { documentType: true, }, }, + accountManager: { + select: { + id: true, + firstName: true, + lastName: true, + emailAddress: true, + mobileNumber: true, + profileImage: true, + userRefNumber: true, + } + }, user: { select: { id: true, @@ -177,6 +188,14 @@ export class HostService { host.logoPath = await getPresignedUrl(bucket, key); } + if (host.accountManager.profileImage) { + const key = host.accountManager.profileImage.startsWith('http') + ? host.accountManager.profileImage.split('.com/')[1] + : host.accountManager.profileImage; + + host.accountManager.profileImage = await getPresignedUrl(bucket, key); + } + if (host.hostParent?.length) { const parent = host.hostParent[0]; // since you allow only 1 parent @@ -354,18 +373,76 @@ export class HostService { }); } - async getAllHostActivity(search?: string, hostXid?: number) { - return await this.prisma.activities.findMany({ + async getAllHostActivity(search?: string, user_xid?: number) { + const hostDetails = await this.prisma.hostHeader.findFirst({ + where: { userXid: user_xid, isActive: true } + }) + + const hostAllActivities = await this.prisma.activities.findMany({ where: { isActive: true, - hostXid: hostXid, + hostXid: hostDetails.id, }, include: { ActivitiesMedia: true, - ActivityAmDetails: true, + ActivityAmDetails: { + select: { + accountManager: { + select: { + id: true, + firstName: true, + lastName: true, + profileImage: true, + emailAddress: true, + roleXid: true, + }, + }, + }, + }, activityType: true, }, }); + + for (const activity of hostAllActivities) { + + /** 1️⃣ Process Activity Media */ + const processedMedia = []; + + for (const media of activity.ActivitiesMedia || []) { + + const key = media.mediaFileName?.startsWith("http") + ? media.mediaFileName.split(".com/")[1] + : media.mediaFileName; + + const presignedUrl = key ? await getPresignedUrl(bucket, key) : null; + + processedMedia.push({ + ...media, + presignedUrl, + }); + } + + activity.ActivitiesMedia = processedMedia; + + /** 2️⃣ Process AM Profile Image */ + const am = activity.ActivityAmDetails?.[0]?.accountManager; + + if (am?.profileImage) { + const key = am.profileImage.startsWith("http") + ? am.profileImage.split(".com/")[1] + : am.profileImage; + + const presignedUrl = await getPresignedUrl(bucket, key); + + activity.ActivityAmDetails[0].accountManager = { + ...am, + profileImage: presignedUrl, + }; + } + } + + + return hostAllActivities; } async acceptMinglarAgreement(user_xid: number) { diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index bfc543b..f4f25cd 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -291,26 +291,26 @@ export class MinglarService { // Process each activity for (const activity of hostActivities) { - /** -------------------------- - * 1️⃣ Process Activity Media - * -------------------------- */ - if (activity.ActivitiesMedia?.length) { - for (const media of activity.ActivitiesMedia) { + /** 1️⃣ Process Activity Media */ + const processedMedia = []; - if (!media.mediaFileName) continue; + for (const media of activity.ActivitiesMedia || []) { - // Extract S3 key if URL or keep raw key - const key = media.mediaFileName.startsWith("http") - ? media.mediaFileName.split(".com/")[1] - : media.mediaFileName; + const key = media.mediaFileName?.startsWith("http") + ? media.mediaFileName.split(".com/")[1] + : media.mediaFileName; - media.mediaFileName = await getPresignedUrl(bucket, key); - } + const presignedUrl = key ? await getPresignedUrl(bucket, key) : null; + + processedMedia.push({ + ...media, + presignedUrl, + }); } - /** -------------------------- - * 2️⃣ Process AM Profile Image - * -------------------------- */ + activity.ActivitiesMedia = processedMedia; + + /** 2️⃣ Process AM Profile Image */ const am = activity.ActivityAmDetails?.[0]?.accountManager; if (am?.profileImage) { @@ -318,10 +318,16 @@ export class MinglarService { ? am.profileImage.split(".com/")[1] : am.profileImage; - am.profileImage = await getPresignedUrl(bucket, key); + const presignedUrl = await getPresignedUrl(bucket, key); + + activity.ActivityAmDetails[0].accountManager = { + ...am, + profileImage: presignedUrl, + }; } } + return hostActivities; } @@ -1645,9 +1651,9 @@ export class MinglarService { isActive: true }, data: { - activityInternalStatus: ACTIVITY_INTERNAL_STATUS.PQQ_TO_UPDATE, + activityInternalStatus: ACTIVITY_INTERNAL_STATUS.PQ_TO_UPDATE, activityDisplayStatus: ACTIVITY_DISPLAY_STATUS.ENHANCING, - amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.PQQ_REJECTED, + amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.PQ_REJECTED, amDisplayStatus: ACTIVITY_AM_DISPLAY_STATUS.ENHANCING } })