public Audit <TableBooking> CreateBooking(BookingRequestDto bookingRequestDto)
        {
            var validationResult = _requestValidator.Validate(bookingRequestDto);

            if (!validationResult.IsSucces)
            {
                throw new ValidationException(validationResult.Error);
            }

            var validatedRequest = validationResult.Ok;
            var tables           = _dataService.GetTables();
            var bookingsForToday = _dataService.FindBookings(validatedRequest.Date);

            var bookingCreationResult = _bookingCreator.Create(validatedRequest, tables, bookingsForToday);

            if (!bookingCreationResult.IsSucces)
            {
                throw new NoSeatsException(bookingCreationResult.Error);
            }

            var createBy       = CurrentContext.CurrentUser;
            var createAt       = DateTimeOffset.Now;
            var auditedBooking = _dataService.SaveBooking(bookingCreationResult.Ok, createBy, createAt);

            return(auditedBooking);
        }
예제 #2
0
        public Result <ValidatedBookingRequest, string> Validate(BookingRequestDto dto)
        {
            if (!DateTimeOffset.TryParse(dto.Date, out DateTimeOffset date))
            {
                return(new Result <ValidatedBookingRequest, string>("Date can't be parsed"));
            }
            if (date < DateTimeOffset.Now)
            {
                return(new Result <ValidatedBookingRequest, string>("Date can't be at past"));
            }

            return(new Result <ValidatedBookingRequest, string>(
                       new ValidatedBookingRequest(dto.SeatsRequested, dto.PersonName, date, dto.DurationHours, dto.Phone)));
        }
        public TableBooking CreateBooking(BookingRequestDto bookingRequestDto)
        {
            var booking = TableBooking.CreateNew(bookingRequestDto);
            var firstAppropriateTable = _availableTableFinder.Find(booking.SeatsRequested, booking.Date, booking.DurationHours);

            if (firstAppropriateTable == null)
            {
                throw new NoSeatsException();
            }

            booking.AssignTable(firstAppropriateTable);
            _dataService.SaveBooking(booking);

            return(booking);
        }
예제 #4
0
        public static TableBooking CreateNew(BookingRequestDto dto)
        {
            if (!DateTimeOffset.TryParse(dto.Date, out DateTimeOffset date))
            {
                throw new ValidationException("Date can't be parsed");
            }
            if (date < DateTimeOffset.Now)
            {
                throw new ValidationException("Date can't be at past");
            }

            return(new TableBooking(
                       Guid.NewGuid(),
                       dto.SeatsRequested,
                       dto.PersonName,
                       dto.Phone,
                       date,
                       dto.DurationHours
                       ));
        }