Untitled

 avatar
unknown
plain_text
a year ago
5.9 kB
7
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