From 3d6226ddaca7316570f4540a393929d3423b82e1 Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Wed, 3 Dec 2025 13:18:28 +0530 Subject: [PATCH] added search --- src/modules/host/services/host.service.ts | 77 ++++++++++++------ .../minglaradmin/services/minglar.service.ts | 78 ++++++++++--------- 2 files changed, 95 insertions(+), 60 deletions(-) diff --git a/src/modules/host/services/host.service.ts b/src/modules/host/services/host.service.ts index ed4a63d..6b5f159 100644 --- a/src/modules/host/services/host.service.ts +++ b/src/modules/host/services/host.service.ts @@ -391,16 +391,54 @@ export class HostService { where: { userXid: user_xid, isActive: true } }) - const whereClause = { + const whereClause: any = { isActive: true, hostXid: hostDetails.id, }; + if (!hostDetails) { + return { + data: [], + total: 0, + page: paginationOptions?.page || 1, + limit: paginationOptions?.limit || 10 + }; + } + + // 🔍 SEARCH (fixed) + if (search?.trim()) { + const term = search.trim(); + + whereClause.OR = [ + { activityRefNumber: { contains: term, mode: 'insensitive' } }, + { activityTitle: { contains: term, mode: 'insensitive' } }, + { + activityType: { + activityTypeName: { contains: term, mode: 'insensitive' } + } + }, + ]; + } const [hostAllActivities, totalCount] = await Promise.all([ this.prisma.activities.findMany({ where: whereClause, - include: { - ActivitiesMedia: true, + select: { + id: true, + activityRefNumber: true, + activityTitle: true, + totalScore: true, + activityInternalStatus: true, + activityDisplayStatus: true, + amInternalStatus: true, + amDisplayStatus: true, + createdAt: true, + checkInAddress: true, + frequency: { + select: { + id: true, + frequencyName: true + } + }, ActivityAmDetails: { select: { accountManager: { @@ -415,7 +453,18 @@ export class HostService { }, }, }, - activityType: true, + activityType: { + select: { + id: true, + activityTypeName: true, + interests: { + select: { + id: true, + interestName: true + } + } + } + }, }, skip: paginationOptions?.skip || 0, take: paginationOptions?.limit || 10, @@ -425,26 +474,6 @@ export class HostService { ]); 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; diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index c3ad927..32080ec 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -1,3 +1,4 @@ +import { getPresignedUrl } from '@/common/middlewares/aws/getPreSignedUrl'; import { ROLE, ROLE_NAME, @@ -19,6 +20,8 @@ import { MINGLAR_STATUS_DISPLAY, MINGLAR_STATUS_INTERNAL, } from '@/common/utils/constants/minglar.constant'; +import { PaginationOptions } from '@/common/utils/pagination/pagination.types'; +import config from '@/config/config'; import { Injectable } from '@nestjs/common'; import { User } from '@prisma/client'; import * as bcrypt from 'bcryptjs'; @@ -26,10 +29,6 @@ import { PrismaService } from '../../../common/database/prisma.service'; import ApiError from '../../../common/utils/helper/ApiError'; import { CreateMinglarDto, UpdateMinglarDto } from '../dto/minglar.dto'; import { sendAMEmailForHostAssign } from './AMEmail.service'; -import { getPresignedUrl } from '@/common/middlewares/aws/getPreSignedUrl'; -import config from '@/config/config'; -import { PaginationOptions } from '@/common/utils/pagination/pagination.types'; -import { ROLES_KEY } from '@/common/decorators/roles.decorator'; const bucket = config.aws.bucketName; @@ -259,23 +258,39 @@ export class MinglarService { } async getAllHostActivityForMinglar(search?: string, hostXid?: number, paginationOptions?: { page: number; limit: number; skip: number }) { - const whereClause = { + const whereClause: any = { isActive: true, - ...(hostXid ? { hostXid } : {}), // Add only if provided + ...(hostXid ? { hostXid } : {}), }; + // 🔥 FIXED SEARCH CONDITION + if (search?.trim()) { + const term = search.trim(); + + whereClause.OR = [ + { activityRefNumber: { contains: term, mode: 'insensitive' } }, + { activityTitle: { contains: term, mode: 'insensitive' } }, + { + activityType: { + activityTypeName: { contains: term, mode: 'insensitive' } + } + }, + ]; + } + const [hostActivities, totalCount] = await Promise.all([ this.prisma.activities.findMany({ where: whereClause, - include: { - ActivitiesMedia: { - select: { - id: true, - mediaFileName: true, - mediaType: true, - displayOrder: true, - }, - }, + select: { + id: true, + activityRefNumber: true, + activityTitle: true, + totalScore: true, + activityInternalStatus: true, + activityDisplayStatus: true, + amInternalStatus: true, + amDisplayStatus: true, + createdAt: true, ActivityAmDetails: { select: { accountManager: { @@ -290,7 +305,18 @@ export class MinglarService { }, }, }, - activityType: true, + activityType: { + select: { + id: true, + activityTypeName: true, + interests: { + select: { + id: true, + interestName: true + } + } + } + }, }, skip: paginationOptions?.skip || 0, take: paginationOptions?.limit || 10, @@ -301,26 +327,6 @@ export class MinglarService { // Process each activity for (const activity of hostActivities) { - - /** 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;