public async Task BookRoom( BookingId bookingId, string guestId, RoomId roomId, StayPeriod period, Money price, string bookedBy, DateTimeOffset bookedAt, IsRoomAvailable isRoomAvailable ) { EnsureDoesntExist(); await EnsureRoomAvailable(roomId, period, isRoomAvailable); Apply( new RoomBooked( bookingId.Value, roomId.Value, guestId, period.CheckIn, period.CheckOut, price.Amount, price.Currency, bookedBy, bookedAt ) ); }
static async Task EnsureRoomAvailable(RoomId roomId, StayPeriod period, IsRoomAvailable isRoomAvailable) { var roomAvailable = await isRoomAvailable(roomId, period); if (!roomAvailable) { throw new DomainException("Room not available"); } }
public void BookRoom(string bookingId, string guestId, RoomId roomId, StayPeriod period) { EnsureDoesntExist(); Apply( new V1.RoomBooked { BookingId = bookingId, GuestId = guestId, RoomId = roomId.Value, CheckIn = period.CheckIn, CheckOut = period.CheckOut } ); }
public async Task BookRoom(string bookingId, string guestId, RoomId roomId, StayPeriod period, IAvailabilityCheck availabilityCheck) { EnsureDoesntExist(); await EnsureRoomAvailable(roomId, period, availabilityCheck); Apply( new V1.RoomBooked { BookingId = bookingId, GuestId = guestId, RoomId = roomId.Value, CheckIn = period.CheckIn, CheckOut = period.CheckOut } ); }
public async Task Handle(V1.BookRoom command) { var period = new StayPeriod(command.CheckIn, command.CheckOut); var roomId = new RoomId(command.RoomId); var exists = await _store.Exists <Booking>(command.BookingId); if (exists) { throw new ApplicationException($"Booking with id {command.BookingId} already exists"); } var booking = new Booking(); await booking.BookRoom(command.BookingId, command.GuestId, roomId, period, _availabilityCheck); await _store.Store(booking); }
public void BookRoom(BookingId id, string roomId, StayPeriod period, decimal price, string?guestId = null) { EnsureDoesntExist(); Apply(new RoomBooked(id, roomId, period.CheckIn, period.CheckOut, price, guestId)); }
public void Import(BookingId id, string roomId, StayPeriod period) { EnsureDoesntExist(); Apply(new BookingImported(id, roomId, period.CheckIn, period.CheckOut)); }