Untitled

 avatar
unknown
plain_text
a year ago
4.4 kB
6
Indexable

Service Car : 

sync getCarBySlugAndId(carId: string, req: Request, res: Response) {
    try {
      const car = await this.carRepository.findById({
        id: carId,
        projection: '_id slug brand plateNumber',
      });

      if (!car) {
        return ResponseHandler.notFound({
          req,
          res,
          error: 'No car found',
          file: 'car.service.ts',
          functionName: 'getCarBySlugAndId',
          args: { carId },
        });
      }

      const responseData = {
        data: car,
        message: 'Car details retrieved successfully.',
      };

      return ResponseHandler.success({ res, responseBody: responseData });
    } catch (error) {
      return ResponseHandler.internalServerError({
        req,
        res,
        error: 'An internal error occurred',
        file: 'car.service.ts',
        functionName: 'getCarBySlugAndId',
        args: { carId },
      });
    }
  }



async getAllCarsBySlugAndId(req: Request, res: Response) {
    try {
      const cars = await this.carRepository.findAll({
        filter: {},
        projection: '_id slug',
      });

      if (!cars.length) {
        return ResponseHandler.notFound({
          req,
          res,
          error: 'No cars found',
          file: 'car.service.ts',
          functionName: 'getAllCarsBySlugAndId',
          args: {},
        });
      }

      const uniqueCars = new Set();
      const uniqueCarData = [];

      for (const car of cars) {
        if (!uniqueCars.has(car.slug)) {
          uniqueCars.add(car.slug);
          uniqueCarData.push({
            id: car._id,
            slug: car.slug,
          });
        }
      }

      const responseData = {
        data: uniqueCarData,
        message: 'All car details retrieved successfully.',
      };

      return ResponseHandler.success({ res, responseBody: responseData });
    } catch (error) {
      return ResponseHandler.internalServerError({
        req,
        res,
        error: 'An internal error occurred',
        file: 'car.service.ts',
        functionName: 'getAllCarsBySlugAndId',
        args: {},
      });
    }
  }


  async verifyListOfCars(carIds: string[], req: Request, res: Response) {
    try {
      if (!carIds || !Array.isArray(carIds) || carIds.length === 0) {
        return ResponseHandler.error({
          req,
          res,
          error: 'Car IDs are required and should be an array',
          file: 'car.service.ts',
          functionName: 'verifyListOfCars',
          args: { carIds },
        });
      }

      const carPromises = carIds.map((carId) => {
        return this.carRepository.findById({
          id: carId,
          projection: { slug: 1 },
        });
      });

      const cars = await Promise.all(carPromises);

      const existingCars = cars.filter((car) => car !== null);

      const existingCarDetails = existingCars
        .map((car) => {
          if (car) {
            return {
              id: car._id.toString(),
              slug: car.slug,
            };
          }
          return null;
        })
        .filter((car) => car !== null);

      const missingCarIds = carIds.filter((carId) => !existingCars.some((car) => car && car._id.toString() === carId));

      if (missingCarIds.length > 0 && existingCarDetails.length > 0) {
        const missingCarIdsString = missingCarIds.join(', ');
        return ResponseHandler.partialContent({
          res,
          responseBody: {
            message: `Some car IDs do not exist: ${missingCarIdsString}`,
            data: { existing: existingCarDetails, missing: missingCarIds },
          },
        });
      } else if (missingCarIds.length > 0) {
        return ResponseHandler.unauthorized({
          req,
          res,
          error: 'All car IDs do not exist',
          file: 'car.service.ts',
          functionName: 'verifyListOfCars',
          args: { carIds, missingCarIds },
        });
      }

      return ResponseHandler.success({
        res,
        responseBody: {
          message: 'All car IDs exist',
          data: existingCarDetails,
        },
      });
    } catch (error) {
      return ResponseHandler.internalServerError({
        req,
        res,
        error: 'Error verifying list of car IDs',
        file: 'car.service.ts',
        functionName: 'verifyListOfCars',
        args: { carIds },
      });
    }
  }

Editor is loading...
Leave a Comment