Пример #1
0
 private void ReturnCarResponseMarkAsNotRented(ReturnCarResponse response, int carId)
 {
     response.CarResults.Add(new ReturnCarResult()
     {
         Message = $"Car with Id {carId} is not rented. Return request will fail.",
         Status  = ReturnCarStatus.CarIsNotRented.ToString()
     });
 }
Пример #2
0
 private void ReturnCarResponseMarkAsNotFound(ReturnCarResponse response, int carId)
 {
     response.CarResults.Add(new ReturnCarResult()
     {
         Message = $"Car with Id {carId} does not exist. Return request will fail.",
         Status  = ReturnCarStatus.CarNotFound.ToString()
     });
 }
Пример #3
0
        private void ReturnCarResponseAddExtraCost(ReturnCarResponse response, Car car)
        {
            int extraDays  = (DateTime.Now.Date - car.RentedUntilDate.Value.Date).Days;
            int extraPrice = extraDays * car.PricePerDay;

            response.CarResults.Add(new ReturnCarResult()
            {
                Message = $"Car with Id {car.Id} will be charged with extra price because is returned late. Extra price is {extraPrice}.",
                Status  = ReturnCarStatus.SuccededWithExtraPrice.ToString()
            });
        }
Пример #4
0
        public async Task <IActionResult> ReturnCarsAsync(ReturnRequest request)
        {
            if (!request.CarIds.Any())
            {
                return(BadRequest($"Please provide atleast one car to return."));
            }

            ReturnCarResponse response = await _returnService.ReturnCarsAsync(request.CarIds);

            return(Ok(response));
        }
Пример #5
0
        public async Task <ReturnCarResponse> ReturnCarsAsync(IEnumerable <int> carIds)
        {
            ReturnCarResponse response = new ReturnCarResponse();
            List <Car>        cars     = await _unitOfWork.Cars.GetAsync(x => carIds.Contains(x.Id));

            foreach (Car car in cars)
            {
                if (car == null)
                {
                    response.Status  = ReturnCarResponseStatus.Failed.ToString();
                    response.Message = $"Something went wrong, check {nameof(response.CarResults)} for more info.";
                    ReturnCarResponseMarkAsNotFound(response, car.Id);
                    _unitOfWork.Rollback();
                    return(response);
                }

                if (!car.Rented)
                {
                    response.Status  = ReturnCarResponseStatus.Failed.ToString();
                    response.Message = $"Something went wrong, check {nameof(response.CarResults)} for more info.";
                    ReturnCarResponseMarkAsNotRented(response, car.Id);
                    _unitOfWork.Rollback();
                    return(response);
                }

                if (DateTime.Now.Date > car.RentedUntilDate.Value.Date)
                {
                    ReturnCarResponseAddExtraCost(response, car);
                }
                else
                {
                    response.CarResults.Add(new ReturnCarResult()
                    {
                        Message = $"Car with Id {car.Id} returned correctly without extra cost.",
                        Status  = ReturnCarStatus.Succeded.ToString()
                    });
                }

                ReturnCar(car);
            }

            response.Status = ReturnCarResponseStatus.Succeded.ToString();
            _unitOfWork.Commit();

            return(response);
        }