示例#1
0
        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
                    )
                );
        }
示例#2
0
        static async Task EnsureRoomAvailable(RoomId roomId, StayPeriod period, IsRoomAvailable isRoomAvailable)
        {
            var roomAvailable = await isRoomAvailable(roomId, period);

            if (!roomAvailable)
            {
                throw new DomainException("Room not available");
            }
        }
示例#3
0
 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
     }
         );
 }
示例#4
0
        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);
        }
示例#6
0
    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));
    }
示例#7
0
    public void Import(BookingId id, string roomId, StayPeriod period)
    {
        EnsureDoesntExist();

        Apply(new BookingImported(id, roomId, period.CheckIn, period.CheckOut));
    }