Beispiel #1
0
        public void AddBooking(UserId userId, int day, Slot slot)
        {
            if (UserCanBook(this, userId) && IsBookableDay(Year, Month, day))
            {
                if (BookingDays.ContainsKey(day))
                {
                    var bookingDay = BookingDays[day];

                    if (SlotIsOpen(bookingDay, slot))
                    {
                        bookingDay.AddBooking(slot, userId);
                    }
                    else
                    {
                        throw new SlotIsClosedException();
                    }
                }
                else
                {
                    var bookingDayId = BookingDayId.From(new DateTime(Year, Month, day));
                    var bookingDay   = new BookingDay(bookingDayId, new Dictionary <Slot, UserId>());

                    bookingDay.AddBooking(slot, userId);
                    BookingDays.Add(day, bookingDay);
                }
            }
            else
            {
                throw new UserHasOverbookedException();
            }
        }