From 31e0b3ff2d689cb42adc7e7ef6ef9ea01144eadc Mon Sep 17 00:00:00 2001 From: paritosh18 Date: Sat, 29 Nov 2025 18:00:15 +0530 Subject: [PATCH] Add search functionality to getAllHostApplicationForAM, getAllCoadminAndAM, getAllInvitationDetails, and getAllInvitedCoadminAndAM handlers --- .../hosts/getAllHostApplicationForAM.ts | 4 +- .../settings/teammates/getAllCoadminAndAM.ts | 5 +- .../teammates/getAllInvitationDetails.ts | 5 +- .../teammates/getAllInvitedCoadminAndAM.ts | 5 +- .../minglaradmin/services/minglar.service.ts | 89 +++++++++++++++---- 5 files changed, 85 insertions(+), 23 deletions(-) diff --git a/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts b/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts index 6bf25d5..8aecd69 100644 --- a/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts +++ b/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts @@ -38,6 +38,7 @@ export const handler = safeHandler(async ( // Get query parameters const search = event.queryStringParameters?.search || ''; const userStatus = event.queryStringParameters?.userStatus || ''; + const roleFilter = event.queryStringParameters?.roleFilter || ''; // Parse pagination parameters const paginationParams = paginationService.getPaginationFromEvent(event); @@ -49,7 +50,8 @@ export const handler = safeHandler(async ( Number(user.roleXid), search, userStatus, - paginationOptions + paginationOptions, + roleFilter ); // Create paginated response diff --git a/src/modules/minglaradmin/handlers/settings/teammates/getAllCoadminAndAM.ts b/src/modules/minglaradmin/handlers/settings/teammates/getAllCoadminAndAM.ts index 587dde8..64cda34 100644 --- a/src/modules/minglaradmin/handlers/settings/teammates/getAllCoadminAndAM.ts +++ b/src/modules/minglaradmin/handlers/settings/teammates/getAllCoadminAndAM.ts @@ -21,7 +21,10 @@ export const handler = safeHandler(async ( // Authenticate user using the shared authForHost function await verifyOnlyMinglarAdminToken(token); - const response = await minglarService.getAllCoadminAndAM(); + // Extract search parameter from query string + const search = event.queryStringParameters?.search || ''; + + const response = await minglarService.getAllCoadminAndAM(search); return { statusCode: 200, diff --git a/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitationDetails.ts b/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitationDetails.ts index a4a4500..8d94741 100644 --- a/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitationDetails.ts +++ b/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitationDetails.ts @@ -21,7 +21,10 @@ export const handler = safeHandler(async ( // Authenticate user using the shared authForHost function await verifyOnlyMinglarAdminToken(token); - const result = await minglarService.getAllInvitationDetails(); + // Extract search parameter from query string + const search = event.queryStringParameters?.search || ''; + + const result = await minglarService.getAllInvitationDetails(search); return { statusCode: 200, diff --git a/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitedCoadminAndAM.ts b/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitedCoadminAndAM.ts index 8f0dd3c..9e626c7 100644 --- a/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitedCoadminAndAM.ts +++ b/src/modules/minglaradmin/handlers/settings/teammates/getAllInvitedCoadminAndAM.ts @@ -21,7 +21,10 @@ export const handler = safeHandler(async ( // Authenticate user using the shared authForHost function await verifyOnlyMinglarAdminToken(token); - const response = await minglarService.getAllInvitedCoadminAndAM(); + // Extract search parameter from query string + const search = event.queryStringParameters?.search || ''; + + const response = await minglarService.getAllInvitedCoadminAndAM(search); return { statusCode: 200, diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index 7342bb4..6ad067a 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -637,11 +637,24 @@ export class MinglarService { } } - async getAllInvitationDetails() { + async getAllInvitationDetails(search?: string) { + // Build search filter if search term is provided + const userSearchFilter = search + ? { + OR: [ + { emailAddress: { contains: search, mode: 'insensitive' as const } }, + { firstName: { contains: search, mode: 'insensitive' as const } }, + { lastName: { contains: search, mode: 'insensitive' as const } }, + { userRefNumber: { contains: search, mode: 'insensitive' as const } }, + ], + } + : {}; + return await this.prisma.inviteDetails.findMany({ where: { isMinglarInvitation: true, isActive: true, + user: search ? userSearchFilter : undefined, }, include: { user: { @@ -672,6 +685,7 @@ export class MinglarService { search?: string, userStatus?: string, paginationOptions?: PaginationOptions, + roleFilter?: string, ) { const filters: any = { isActive: true, @@ -683,25 +697,18 @@ export class MinglarService { }; /** ----------------------------------- - * SEARCH FILTER (ID, EMAIL, NAME) + * SEARCH FILTER (FIRST NAME, LAST NAME, USER REF NUMBER) * ----------------------------------- */ if (search?.trim()) { const term = search.trim(); - - if (/^\d+$/.test(term)) { - // Search by Host ID - filters.id = Number(term); - } else { - // Search by email or name - filters.user = { - ...filters.user, - OR: [ - { emailAddress: { contains: term, mode: 'insensitive' } }, - { firstName: { contains: term, mode: 'insensitive' } }, - { lastName: { contains: term, mode: 'insensitive' } }, - ], - }; - } + filters.user = { + ...filters.user, + OR: [ + { firstName: { contains: term, mode: 'insensitive' } }, + { lastName: { contains: term, mode: 'insensitive' } }, + { userRefNumber: { contains: term, mode: 'insensitive' } }, + ], + }; } /** ----------------------------------- @@ -715,6 +722,24 @@ export class MinglarService { filters.adminStatusInternal = MINGLAR_STATUS_INTERNAL.ADMIN_TO_REVIEW; } + /** ----------------------------------- + * ROLE FILTER + * ----------------------------------- */ + if (roleFilter?.trim()) { + const roleFilterLower = roleFilter.trim().toLowerCase(); + let roleId: number | undefined; + + if (roleFilterLower === 'co-admin') { + roleId = ROLE.CO_ADMIN; + } else if (roleFilterLower === 'account-manager') { + roleId = ROLE.ACCOUNT_MANAGER; + } + + if (roleId) { + filters.user.roleXid = roleId; + } + } + /** ----------------------------------- * ROLE-BASED FILTER: * CO_ADMIN & ACCOUNT_MANAGER only see assigned hosts @@ -925,7 +950,19 @@ export class MinglarService { return onBoardingHostApp; } - async getAllCoadminAndAM() { + async getAllCoadminAndAM(search?: string) { + // Build search filter if search term is provided + const searchFilter = search + ? { + OR: [ + { email: { contains: search, mode: 'insensitive' as const } }, + { firstName: { contains: search, mode: 'insensitive' as const } }, + { lastName: { contains: search, mode: 'insensitive' as const } }, + { userRefNumber: { contains: search, mode: 'insensitive' as const } }, + ], + } + : {}; + // 1. Fetch all required users (Admin, Co-Admin, AM) const users = await this.prisma.user.findMany({ where: { @@ -938,6 +975,7 @@ export class MinglarService { }, isActive: true, userStatus: USER_STATUS.ACTIVE, + ...searchFilter, }, include: { role: { @@ -979,7 +1017,19 @@ export class MinglarService { })); } - async getAllInvitedCoadminAndAM() { + async getAllInvitedCoadminAndAM(search?: string) { + // Build search filter if search term is provided + const searchFilter = search + ? { + OR: [ + { emailAddress: { contains: search, mode: 'insensitive' as const } }, + { firstName: { contains: search, mode: 'insensitive' as const } }, + { lastName: { contains: search, mode: 'insensitive' as const } }, + { userRefNumber: { contains: search, mode: 'insensitive' as const } }, + ], + } + : {}; + return await this.prisma.user.findMany({ where: { roleXid: { @@ -993,6 +1043,7 @@ export class MinglarService { userStatus: { not: USER_STATUS.DE_ACTIVATED, // Exclude DE_ACTIVATED status }, + ...searchFilter, }, include: { role: {