Exemplo n.º 1
0
        public async Task <ActionResult <RoomBookingInfo> > Get(RoomBookingRequestModel roomBookingRequestModel)
        {
            var response = await _roomService.BookRoomAsync(roomBookingRequestModel);

            if (response.IsError)
            {
                return(StatusCode((int)response.ErrorCode, response.ErrorDescription));
            }

            return(Ok(response.Data));
        }
        public async Task <ServiceResponse <List <RoomBookingInfo> > > BookRoomAsync(RoomBookingRequestModel roomBookingRequestModel)
        {
            //TODO: Check if request is in the past.
            if (roomBookingRequestModel.StartTime < DateTime.Now)
            {
                //
            }

            TimeSpan startTime = new TimeSpan(roomBookingRequestModel.StartTime.Hour, minutes: roomBookingRequestModel.StartTime.Minute, seconds: 0);
            TimeSpan endTime   = new TimeSpan(roomBookingRequestModel.EndTime.Hour, minutes: roomBookingRequestModel.EndTime.Minute, seconds: 0);

            var diff    = endTime - startTime;
            var diffMax = new TimeSpan(1, 0, 0);

            if (diff > diffMax)
            {
                return(new ServiceResponse <List <RoomBookingInfo> >
                {
                    ErrorCode = HttpStatusCode.Conflict,
                    ErrorDescription = "Room Request Cannot be greater than one hour"
                });
            }

            try
            {
                var checkBooking = await _context.RoomBookings.Where(w => w.Room.Id == roomBookingRequestModel.RoomId && w.StartTime >= roomBookingRequestModel.StartTime)
                                   .ToListAsync();

                if (checkBooking.Any())
                {
                    return(new ServiceResponse <List <RoomBookingInfo> >
                    {
                        ErrorCode = HttpStatusCode.Conflict,
                        ErrorDescription = "Room already booked for some or all of the requested time."
                    });
                }

                return(new ServiceResponse <List <RoomBookingInfo> >());
            }
            catch (Exception e)
            {
                //TODO: Move to generic method.
                Debug.WriteLine(e);
                return(new ServiceResponse <List <RoomBookingInfo> >
                {
                    ErrorCode = HttpStatusCode.InternalServerError,
                    ErrorDescription = "Internal Server Error"
                });
            }
        }