added search

This commit is contained in:
2025-12-03 13:18:28 +05:30
parent 38c616a7af
commit 3d6226ddac
2 changed files with 95 additions and 60 deletions

View File

@@ -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;

View File

@@ -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;