Add search functionality to getAllHostApplicationForAM, getAllCoadminAndAM, getAllInvitationDetails, and getAllInvitedCoadminAndAM handlers

This commit is contained in:
paritosh18
2025-11-29 18:00:15 +05:30
parent b1a70acfa8
commit 31e0b3ff2d
5 changed files with 85 additions and 23 deletions

View File

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

View File

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

View File

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

View File

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

View File

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