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() }); }
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() }); }
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() }); }
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)); }
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); }