public async Task <Guid> BookVehicle(BookVehicleDTO bookVehicleDTO) { try { var vehicle = await _context.Vehicles.FirstOrDefaultAsync(x => x.ID == bookVehicleDTO.VehicleID && x.IsAvailable); var customer = await _context.Users.FirstOrDefaultAsync(x => x.Id == bookVehicleDTO.UserID); if (vehicle != null && customer != null) { vehicle.IsAvailable = false; await _rentalEventService.AddRentalEvent(vehicle, customer, bookVehicleDTO); var userRentalsForVip = await _userRentalService.GetCustomersRentalEventsForTimeRange(customer.Id, Constants.RentalEventDaysForVip); if (userRentalsForVip.Count >= Constants.MinRentalEventsForVip) { customer.IsVip = true; } await _context.SaveChangesAsync(); return(vehicle.ID); } throw new NullReferenceException(); } catch (Exception) { throw new AggregateException(); } }
public IActionResult AddRentalEvent(BookVehicleDTO bookVehicleDTO) { try { return(Ok(_rentalEventService.CreateEvent(bookVehicleDTO))); } catch (Exception e) { return(BadRequest(e.Message)); } }
public async Task AddRentalEvent(Vehicle vehicle, ApplicationUser customer, BookVehicleDTO bookVehicleDTO) { var rentalEvent = new RentalEvent { Customer = customer, Vehicle = vehicle, StartDate = bookVehicleDTO.StartDate, EndDate = bookVehicleDTO.EndDate, IsActive = true }; rentalEvent.TotalRentalEventPrice = _helper.TotalPriceCalculator(rentalEvent); await _context.RentalEvents.AddAsync(rentalEvent); await _context.SaveChangesAsync(); }
public async Task CreateEvent(BookVehicleDTO bookVehicleDTO) { var vehicle = await _context.Vehicles.FirstOrDefaultAsync(x => x.ID == bookVehicleDTO.VehicleID); var customer = await _context.Users.FirstOrDefaultAsync(x => x.Id == bookVehicleDTO.UserID); try { if (vehicle != null && customer != null) { await AddRentalEvent(vehicle, customer, bookVehicleDTO); await _context.SaveChangesAsync(); } } catch (Exception e) { throw new Exception(e.Message); } }
public async Task <Guid> BookVehicle(BookVehicleDTO bookVehicleDTO) => await _service.BookVehicle(bookVehicleDTO);