diff --git a/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts b/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts index 8aecd69..f75f5d4 100644 --- a/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts +++ b/src/modules/minglaradmin/handlers/hosthub/hosts/getAllHostApplicationForAM.ts @@ -43,6 +43,7 @@ export const handler = safeHandler(async ( // Parse pagination parameters const paginationParams = paginationService.getPaginationFromEvent(event); const paginationOptions = paginationService.parsePaginationParams(paginationParams); + const applicationStatus = event.queryStringParameters?.applicationStatus || ''; // Get paginated host applications const { data, totalCount } = await minglarService.getAllHostApplications( @@ -51,7 +52,8 @@ export const handler = safeHandler(async ( search, userStatus, paginationOptions, - roleFilter + roleFilter, + applicationStatus ); // Create paginated response diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index 8c1b3f3..589b43d 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -704,6 +704,7 @@ export class MinglarService { userStatus?: string, paginationOptions?: PaginationOptions, roleFilter?: string, + applicationStatus?: string ) { const filters: any = { isActive: true, @@ -714,68 +715,55 @@ export class MinglarService { }, }; - /** ----------------------------------- - * SEARCH FILTER (FIRST NAME, LAST NAME, USER REF NUMBER) - * ----------------------------------- */ + /** SEARCH FILTER **/ if (search?.trim()) { const term = search.trim(); - filters.user = { - ...filters.user, - OR: [ - { firstName: { contains: term, mode: 'insensitive' } }, - { lastName: { contains: term, mode: 'insensitive' } }, - { userRefNumber: { contains: term, mode: 'insensitive' } }, - ], - }; + + if (/^\d+$/.test(term)) { + filters.id = Number(term); + } else { + filters.user = { + ...filters.user, + OR: [ + { emailAddress: { contains: term, mode: 'insensitive' } }, + { firstName: { contains: term, mode: 'insensitive' } }, + { lastName: { contains: term, mode: 'insensitive' } }, + ], + }; + } } - /** ----------------------------------- - * USER STATUS FILTER (NEW) - * ----------------------------------- */ + /** USER STATUS FILTER **/ if ( userStatus && - userStatus.trim().toLowerCase() === - MINGLAR_STATUS_DISPLAY.NEW.toLowerCase() + userStatus.trim().toLowerCase() === MINGLAR_STATUS_DISPLAY.NEW.toLowerCase() ) { filters.adminStatusInternal = MINGLAR_STATUS_INTERNAL.ADMIN_TO_REVIEW; } - /** ----------------------------------- - * ROLE FILTER - * ----------------------------------- */ - if (roleFilter?.trim()) { - const roleFilterLower = roleFilter.trim().toLowerCase(); - let roleId: number | undefined; + /** APPLICATION STATUS FILTER (NEW) **/ + const APPLICATION_STATUS_MAP: Record = { + "Admin To Review": MINGLAR_STATUS_INTERNAL.ADMIN_TO_REVIEW, + "AM To Review": MINGLAR_STATUS_INTERNAL.AM_TO_REVIEW, + "AM Rejected": MINGLAR_STATUS_INTERNAL.AM_REJECTED, + }; - if (roleFilterLower === 'co-admin') { - roleId = ROLE.CO_ADMIN; - } else if (roleFilterLower === 'account-manager') { - roleId = ROLE.ACCOUNT_MANAGER; - } - - if (roleId) { - filters.user.roleXid = roleId; + if (applicationStatus?.trim()) { + const key = applicationStatus.trim(); + if (APPLICATION_STATUS_MAP[key]) { + filters.adminStatusInternal = APPLICATION_STATUS_MAP[key]; } } - /** ----------------------------------- - * ROLE-BASED FILTER: - * CO_ADMIN & ACCOUNT_MANAGER only see assigned hosts - * ----------------------------------- */ + /** ROLE-BASED FILTER **/ if (userRoleXid === ROLE.CO_ADMIN || userRoleXid === ROLE.ACCOUNT_MANAGER) { filters.accountManagerXid = userId; } - /** ----------------------------------- - * COUNT TOTAL RECORDS - * ----------------------------------- */ - const totalCount = await this.prisma.hostHeader.count({ - where: filters, - }); + // COUNT + const totalCount = await this.prisma.hostHeader.count({ where: filters }); - /** ----------------------------------- - * MAIN QUERY WITH PAGINATION - * ----------------------------------- */ + // MAIN QUERY const results = await this.prisma.hostHeader.findMany({ where: filters, select: { @@ -787,11 +775,9 @@ export class MinglarService { createdAt: true, companyName: true, assignedOn: true, - cities: { select: { id: true, cityName: true } }, states: { select: { id: true, stateName: true } }, countries: { select: { id: true, countryName: true } }, - user: { select: { id: true, @@ -813,14 +799,11 @@ export class MinglarService { }, }, }, - orderBy: { createdAt: 'desc' }, + orderBy: { createdAt: "desc" }, skip: paginationOptions?.skip || 0, take: paginationOptions?.limit || 10, }); - /** ----------------------------------- - * TRANSFORM RESPONSE - * ----------------------------------- */ const transformedData = results.map((h) => ({ hostId: h.id, host: h.user, @@ -837,12 +820,10 @@ export class MinglarService { assignedOn: h.assignedOn || null, })); - return { - data: transformedData, - totalCount, - }; + return { data: transformedData, totalCount }; } + async getAllOnboardingHostApplications(search?: string) { const where: any = { isActive: true, @@ -1082,13 +1063,13 @@ export class MinglarService { // 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 } }, - ], - } + 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)