Untitled
unknown
plain_text
2 years ago
5.9 kB
8
Indexable
async getAllRequests(res: Response, req: Request): Promise<Response> {
try {
// const { error } = filterValidationSchema.validate(req.query);
// if (error) {
// return ResponseHandler.error({
// req,
// res,
// error: error.details[0].message,
// file: 'RequestService.ts',
// functionName: 'getAllRequests',
// args: {},
// });
// }
const filter: any = {};
if (req.query?.isB2B) {
const isB2B = req.query.isB2B === 'true';
filter.isB2B = isB2B;
}
if (req.query?.isUrgent) {
const isUrgent = req.query.isUrgent === 'true';
filter.isUrgent = isUrgent;
}
if (req.query?.isDelegation) {
const isDelegation = req.query.isDelegation === 'true';
filter.isDelegation = isDelegation;
}
if (req.query?.vatIncluded) {
const vatIncluded = req.query.vatIncluded === 'true';
filter.vatIncluded = vatIncluded;
}
if (req.query?.status) {
const status = Array.isArray(req.query.status) ? req.query.status : [req.query.status];
const normalizedStatus = status.map((status) => (typeof status === 'string' ? status.toLowerCase() : ''));
filter.status = { $in: normalizedStatus.map((status) => new RegExp(status, 'i')) };
}
if (req.query?.type) {
const serviceType = String(req.query.type);
filter['services.type'] = serviceType;
}
if (req.query?.method) {
const paymentMethod = String(req.query.method);
filter['payment.method'] = paymentMethod;
}
if (req.query?.paymentStatus) {
const paymentStatus = String(req.query.paymentStatus);
filter['payment.status'] = paymentStatus;
}
if (req.query?.paymentType) {
const paymentType = String(req.query.paymentType);
filter['payment.type'] = paymentType;
}
if (req.query?.smallLuggageCount) {
const smallLuggageCount = parseInt(req.query.smallLuggageCount as string, 10);
filter['services.details.smallLuggageCount'] = smallLuggageCount;
}
if (req.query?.bigLuggageCount) {
const bigLuggageCount = parseInt(req.query.bigLuggageCount as string, 10);
filter['services.details.bigLuggageCount'] = bigLuggageCount;
}
if (req.query?.kidsCount) {
const kidsCount = parseInt(req.query.kidsCount as string, 10);
filter['services.details.kidsCount'] = kidsCount;
}
if (req.query?.babiesCount) {
const babiesCount = parseInt(req.query.babiesCount as string, 10);
filter['services.details.babiesCount'] = babiesCount;
}
if (req.query?.requestedDuration) {
const requestedDuration = parseInt(req.query.requestedDuration as string, 10);
filter['services.details.requestedDuration'] = requestedDuration;
}
if (req.query?.kmIncluded) {
const kmIncluded = parseInt(req.query.kmIncluded as string, 10);
filter['services.details.kmIncluded'] = kmIncluded;
}
if (req.query?.pickupWithMeetAndGreetPickUp) {
const pickupWithMeetAndGreetPickUp = req.query.pickupWithMeetAndGreetPickUp === 'true';
filter['services.details.pickup.withMeetAndGreet'] = pickupWithMeetAndGreetPickUp;
}
if (req.query?.pickupWithMeetAndGreetDropoff) {
const pickupWithMeetAndGreetDropoff = req.query.pickupWithMeetAndGreetDropoff === 'true';
filter['services.details.dropoff.withMeetAndGreet'] = pickupWithMeetAndGreetDropoff;
}
if (req.query?.statusOffre) {
const status = Array.isArray(req.query.statusOffre) ? req.query.statusOffre : [req.query.statusOffre];
filter['services.offers.status'] = { $in: status };
}
const requests = await this.requestRepository.findAll({ filter });
//console.log('🚀 ~ RequestService ~ getAllRequests ~ requests:', requests);
if (requests.length === 0) {
let message = 'No requests match the provided criteria.';
const filterKeys = Object.keys(filter);
if (filterKeys.length > 0) {
message += ' Please verify the following filters and try again: ' + filterKeys.join(', ') + '.';
}
return ResponseHandler.success({
res,
responseBody: {
message: message,
data: [],
//filters: filterKeys,
},
});
}
const items_per_page_raw = req.query['items_per_page'];
let items_per_page = parseInt(items_per_page_raw as string, 10);
let page = parseInt(req.query.page as string, 10);
if (isNaN(items_per_page) || items_per_page <= 0) {
items_per_page = 1;
}
if (isNaN(page) || page <= 0) {
page = 1;
}
const startIndex = (page - 1) * items_per_page;
const endIndex = startIndex + items_per_page;
const paginatedResults = requests.slice(startIndex, endIndex);
const count = requests.length;
const totalPages = Math.ceil(count / items_per_page);
return ResponseHandler.success({
res,
responseBody: {
count,
totalPages,
paginatedResults,
message: 'Filter applied successfully. Requests filtered based on the provided criteria.',
// data: requests,
},
});
} catch (error: any) {
return ResponseHandler.internalServerError({
req,
res,
error: 'Error fetching requests',
file: 'RequestService.ts',
functionName: 'getAllRequests',
args: {},
});
}
}Editor is loading...
Leave a Comment