From 22b359315013e0c1e195f3e81a87b7b5607d8639 Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Mon, 9 Mar 2026 15:57:14 +0530 Subject: [PATCH] sending 5 random activities in the get surprise me api --- src/modules/user/services/user.service.ts | 77 +++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/modules/user/services/user.service.ts b/src/modules/user/services/user.service.ts index ce73d8d..402238f 100644 --- a/src/modules/user/services/user.service.ts +++ b/src/modules/user/services/user.service.ts @@ -1687,6 +1687,82 @@ export class UserService { }), ]); + /* ===================================================== + RANDOM ACTIVITIES (5 COVER IMAGES) +===================================================== */ + + const totalActiveCount = await tx.activities.count({ + where: { + isActive: true, + activityInternalStatus: ACTIVITY_INTERNAL_STATUS.ACTIVITY_LISTED, + amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.ACTIVITY_LISTED, + deletedAt: null, + id: { + notIn: safeExcludedIds, + }, + ...excludeUserInterestCondition, + }, + }); + + 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: { + isActive: true, + activityInternalStatus: ACTIVITY_INTERNAL_STATUS.ACTIVITY_LISTED, + amInternalStatus: ACTIVITY_AM_INTERNAL_STATUS.ACTIVITY_LISTED, + deletedAt: null, + id: { + notIn: safeExcludedIds, + }, + ...excludeUserInterestCondition, + }, + 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, + }; + }), + ); + } + /* ===================================================== 7️⃣ FINAL RESPONSE ===================================================== */ @@ -1695,6 +1771,7 @@ export class UserService { interests: interestsWithActivities, interestedCount: interestedActivityIds.length, bucketCount: bucketActivityIds.length, + randomActivities, mostHypedActivities: { page,