Add search functionality to getAllHostApplicationForAM, getAllCoadminAndAM, getAllInvitationDetails, and getAllInvitedCoadminAndAM handlers
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user