added filter in get host am api

This commit is contained in:
2025-12-01 15:43:06 +05:30
parent 067d1a1f1b
commit 32f4c7ce42
2 changed files with 44 additions and 61 deletions

View File

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

View File

@@ -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<string, string> = {
"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)