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