public async Task <Rental> RegisterRental(DateTime from, DateTime to, int carMilageKm, long customerId, long rentalCarId) { var carRentals = await this.unitOfWork.Rental.GetRentals(rentalCarId : rentalCarId); if (carRentals.Any(c => c.ReturnedAt == null && IsOverlapping(interval1: (c.From, c.To), interval2: (from, to)))) { throw new ArgumentException("Car is not available!"); } var rentalCar = await this.unitOfWork.RentalCar.Get(rentalCarId : rentalCarId); rentalCar.MilageKm = carMilageKm; this.unitOfWork.RentalCar.Update(rentalCar: rentalCar); var bookingNumber = Guid.NewGuid().ToString(); var newRental = new DAL.Models.Rental() { BookingNumber = bookingNumber, From = from, To = to, RentalCarId = rentalCarId, CustomerId = customerId, ReturnedAt = null, PaidPrice = null, }; await this.unitOfWork.Rental.Add(rental : newRental); await this.unitOfWork.CompleteAsync(); return(this.rentalConverter.Convert(rental: newRental)); }
public void TestIsOverlapping() { var interval = (5, 10); Assert.Equal(false, IsOverlapping(interval, (1, 2))); Assert.Equal(true, IsOverlapping(interval, (1, 6))); Assert.Equal(true, IsOverlapping(interval, (1, 11))); Assert.Equal(true, IsOverlapping(interval, (5, 9))); Assert.Equal(true, IsOverlapping(interval, (8, 11))); Assert.Equal(false, IsOverlapping(interval, (11, 12))); }