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); }
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); }
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 )); }