public TableBookingResponse BookTable(TableBookingRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var avaliableTables = _tableRepository.GetAvaliableTables(request.ReservationDate);

            var response = Create <TableBookingResponse>(request);

            if (avaliableTables.FirstOrDefault() is Table table)
            {
                var deskBooking = Create <TableBooking>(request);
                deskBooking.TableId = table.Id;
                _tableBookingRespository.Save(deskBooking);
                response.Code           = TableBookingResultCode.Success;
                response.TableBookingId = deskBooking.Id;
            }
            else
            {
                response.Code = TableBookingResultCode.NoTableAvaliable;
            }

            return(response);
        }
 private T Create <T>(TableBookingRequest request) where T : TableBookingBase, new()
 {
     return(new T
     {
         FirstName = request.FirstName,
         LastName = request.LastName,
         Email = request.Email,
         ReservationDate = request.ReservationDate
     });
 }
示例#3
0
 private static T Assign <T>(TableBookingRequest request) where T : BaseTableBooking, new()
 {
     return(new T
     {
         FirstName = request.FirstName,
         LastName = request.LastName,
         Email = request.Email,
         Date = request.Date
     });
 }
示例#4
0
        public void Initialise()
        {
            _bookingRepository = new Mock <ITableBookingRepository>();
            _tableRepository   = new Mock <ITableRepository>();
            _request           = new TableBookingRequest {
                FirstName = "John", LastName = "Doe", Email = "*****@*****.**", Date = new DateTime(2020, 12, 12)
            };
            _processor = new TableBookingRequestProcessor(_bookingRepository.Object, _tableRepository.Object);
            _tables    = new List <Table> {
                new Table {
                    Id = 1
                }
            };

            _tableRepository.Setup(_ => _.GetAvailableTables(_request.Date)).Returns(_tables);
        }
        public TableBookerProcessorTests()
        {
            _request = new TableBookingRequest
            {
                FirstName       = "Tekus",
                LastName        = "Arkbox",
                Email           = "*****@*****.**",
                ReservationDate = new DateTime(2021, 6, 15)
            };

            _avaliableTables = new List <Table> {
                new Table()
            };
            _tableBookerRepositoyMock = new Mock <ITableBookingRespository>();
            _tableRepositoryMock      = new Mock <ITableRepository>();
            _tableRepositoryMock.Setup(repository => repository.GetAvaliableTables(_request.ReservationDate))
            .Returns(_avaliableTables);
            _processor = new TableBookerProcessor(_tableBookerRepositoyMock.Object, _tableRepositoryMock.Object);
        }
示例#6
0
        public TableBookingResult BookTable(TableBookingRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var tables = _tableRepository.GetAvailableTables(request.Date);
            var result = Assign <TableBookingResult>(request);

            if (tables.FirstOrDefault() is Table availableTable)
            {
                var tableBooking = Assign <TableBooking>(request);
                tableBooking.TableId = availableTable.Id;
                _bookingRepository.SaveBooking(tableBooking);
                result.Code      = TableBookingResultCode.Available;
                result.BookingId = tableBooking.TableId;
            }
            else
            {
                result.Code = TableBookingResultCode.NotAvailable;
            }
            return(result);
        }