public async Task RentCar(RentCarModel model, DateTime currentDate) { AssertRentalRangeValid(model.StartDate, model.EndDate, currentDate); var customer = await _context.Customers.FirstOrDefaultAsync(c => c.Email == model.CustomerEmail); if (customer == null) { throw new CustomerNotFound(); } var carToRent = await FindAvailableCarsForRange(model.StartDate, model.EndDate) .FirstOrDefaultAsync(car => car.Id == model.CarId); if (carToRent == null) { throw new CarNotAvailable(); } var booking = new RentalBooking() { Id = model.BookingId, Car = carToRent, BookingNumber = model.BookingNumber, StartDate = model.StartDate, EndDate = model.EndDate, Customer = customer }; await _context.Bookings.AddAsync(booking); await _context.SaveChangesAsync(); }
private static CustomerBookingOutputModel ToBookingOutputModel(RentalBooking booking) { var returnRentalModel = booking.RentalReturn != null ? new BookingReturnOutputModel(booking.RentalReturn.ReturnDate, booking.RentalReturn.Mileage, booking.RentalReturn.Price) : null; return(new CustomerBookingOutputModel( booking.BookingNumber, booking.Car.Model, booking.Car.Category, booking.StartDate, booking.EndDate, returnRentalModel)); }
private static async Task <RentalBooking> AddBooking(RentalCarsDbContext context, Car car, string startDate, string endDate) { var customer = context.Customers.First(); var booking = new RentalBooking { Id = Guid.NewGuid(), CarId = car.Id, BookingNumber = "ABC", StartDate = DateTime.Parse(startDate), EndDate = DateTime.Parse(endDate), CustomerId = customer.Id }; await context.Bookings.AddAsync(booking); await context.SaveChangesAsync(); return(booking); }