From f45c33ba83bdabb0dff81176b0ab2012ab64fb90 Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Mon, 9 Mar 2026 16:00:31 +0530 Subject: [PATCH] sending the random activities in the getconnection api --- src/modules/user/services/user.service.ts | 70 +++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/modules/user/services/user.service.ts b/src/modules/user/services/user.service.ts index 402238f..0295fa0 100644 --- a/src/modules/user/services/user.service.ts +++ b/src/modules/user/services/user.service.ts @@ -3423,14 +3423,84 @@ export class UserService { })) ); + /* ===================================================== + RANDOM ACTIVITIES FROM CONNECTION USERS (5 COVER IMAGES) +===================================================== */ + const totalActiveCount = await tx.activities.count({ + where: { + id: { in: connectionActivityIds }, + isActive: true, + activityInternalStatus: ACTIVITY_INTERNAL_STATUS.ACTIVITY_LISTED, + amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.ACTIVITY_LISTED, + activityTypeXid: { in: activityTypeIds }, + deletedAt: null, + }, + }); + let randomActivities: any[] = []; + + if (totalActiveCount > 0) { + const takeCount = Math.min(5, totalActiveCount); + + const randomOffsets = new Set(); + + while (randomOffsets.size < takeCount) { + randomOffsets.add(Math.floor(Math.random() * totalActiveCount)); + } + + const randomFetched = await Promise.all( + Array.from(randomOffsets).map((offset) => + tx.activities.findFirst({ + skip: offset, + where: { + id: { in: connectionActivityIds }, + isActive: true, + activityInternalStatus: ACTIVITY_INTERNAL_STATUS.ACTIVITY_LISTED, + amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.ACTIVITY_LISTED, + activityTypeXid: { in: activityTypeIds }, + deletedAt: null, + }, + select: { + id: true, + activityTitle: true, + ActivitiesMedia: { + where: { isActive: true, isCoverImage: true }, + orderBy: { displayOrder: "asc" }, + take: 1, + select: { + mediaFileName: true, + }, + }, + }, + }), + ), + ); + + randomActivities = await Promise.all( + randomFetched + .filter(Boolean) + .map(async (activity) => { + const cover = activity!.ActivitiesMedia?.[0]; + + return { + activityId: activity!.id, + activityTitle: activity!.activityTitle, + coverImage: cover?.mediaFileName ?? null, + coverImagePresignedUrl: cover?.mediaFileName + ? await attachPresignedUrl(cover.mediaFileName) + : null, + }; + }), + ); + } return { experiencesLogged: 25, citiesDiscovered: 10, loggedInNetworkCount: 0, citiesInNetworkCount: 0, + randomActivities, interestedCount: userInterestedActivityIds.length, bucketCount: userBucketActivityIds.length, pagination: {