public async Task <PageModel <HotelRoomModel> > GetHotelRooms(int hotelId, FilteredRoomsRequestModel request)
        {
            int size = request.PageSize ?? _pageSize;

            if (size > _maxPageSize)
            {
                size = _pageSize;
            }

            var entityList = _dataContext.HotelRooms as IQueryable <HotelRoom>;

            var resultQuery = entityList
                              .Where(r => r.HotelId == hotelId)
                              .FilterRooms(request, _maxElapsedMinutes, _dataContext)
                              .Distinct()
                              .Include(r => r.RoomType)
                              .Include(r => r.Images);

            int resultCount = await resultQuery.CountAsync();

            int currentPage = (request.Page > 0) ? request.Page : 1;

            var listForPage = resultQuery
                              .CutList(size, currentPage)
                              .Select((r) => new HotelRoomModel(r));

            return(new PageModel <HotelRoomModel>(currentPage, size, resultCount, listForPage));
        }
        public async Task <IActionResult> GetRoomList(int id, [FromQuery] FilteredRoomsRequestModel requestModel)
        {
            try
            {
                var rooms = await _hotelService.GetHotelRooms(id, requestModel);

                return(Ok(rooms));
            }
            catch (Exception e)
            {
                _logger.LogInformation(e.Message, e.StackTrace);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Example #3
0
        public static IQueryable <HotelRoom> FilterRooms(this IQueryable <HotelRoom> rooms,
                                                         FilteredRoomsRequestModel filters, int maxElapsedMinutes, HotelDbContext dataContext = null)
        {
            if (filters == null)
            {
                return(rooms);
            }

            if (filters.RoomId != null)
            {
                return(rooms.FilterById(filters.RoomId));
            }

            if (filters.Number != null)
            {
                return(rooms.FilterByNumber(filters.Number));
            }

            return(rooms
                   .FilterByAdultAmount(filters.Adults)
                   //.FilterByCost(filters.MinCost, filters.MaxCost)
                   .FilterByDateAvailability(filters.MoveInDate, filters.MoveOutDate, maxElapsedMinutes, dataContext));
        }