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.

This commit is contained in:
2025-12-02 17:53:19 +05:30
parent 6b673a173d
commit 4772c320ba
2 changed files with 105 additions and 22 deletions

View File

@@ -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) {