public void BookRoom(HotelRoomBookingModel bookingDetails) { bookingDetails = bookingDetails ?? throw new HotelBookingInvalidDetailesException(); var room = _dbContext.HotelRooms .Include(r => r.Reservations) .FirstOrDefault(r => r.Id == bookingDetails.RoomId) ?? throw new HotelRoomNotFoundException(); if (bookingDetails.Guests > room.MaxGuests) { throw new HotelRoomGuestsExceededException(); } // correction for dates containing time bookingDetails.Range.Start = bookingDetails.Range.Start.Date; bookingDetails.Range.End = bookingDetails.Range.End.Date; if (!IsRoomAvailable(room, bookingDetails.Range)) { throw new HotelRoomUnavailableException(); } room.Reservations.Add(new HotelRoomReservation { UserId = bookingDetails.UserId, StartTime = bookingDetails.Range.Start, EndTime = bookingDetails.Range.End, GuestsCount = bookingDetails.Guests }); _dbContext.SaveChanges(); }
public IActionResult BookRoom(HotelRoomBookingModel bookingDetails) { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; if (!int.TryParse(userIdClaim, out var userId)) { throw new InvalidClaimException(); } bookingDetails.UserId = userId; _hotelService.BookRoom(bookingDetails); return(Ok()); }