Beispiel #1
0
        public async Task <PagedResponse <Room> > GetRoomsPagedAsync(RoomFilter filter)
        {
            var _key = $"name={filter.Name}&rate={filter.Rate}&pageindex={filter.PageIndex}&rowsperpage={filter.RowsPerPage}";

            List <RoomEntity> dbRecords = null;

            if (!_memCache.TryGetValue(CacheKeys.GetCacheKeyRoomList(_key), out dbRecords))
            {
                var cacheOptions = new MemoryCacheEntryOptions
                {
                    AbsoluteExpiration = DateTime.Now.AddMinutes(1),
                    // SlidingExpiration = DateTime.Now.AddMinutes(1)
                    Priority = CacheItemPriority.Normal
                };

                var entityData = await filter.ApplyTo(_dbContext.Rooms).ToListAsync();

                if (entityData.Any())
                {
                    dbRecords = entityData;
                    _memCache.Set(CacheKeys.GetCacheKeyRoomList(_key), dbRecords, cacheOptions);
                }
            }

            dbRecords = dbRecords ?? new List <RoomEntity>();

            var rooms = dbRecords.Select(room => _mapper.Map <Room>(room)).ToList();
            PagedResponse <Room> pageResponse = new PagedResponse <Room>
            {
                Data  = rooms,
                Links = new Links
                {
                    NextPage      = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.NextRouteValues)),
                    PreviousePage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.PreviousRouteValues))
                }
            };

            return(pageResponse);

            /*
             * // Filtering Logic1
             * // Func<RoomFilter, IQueryable<RoomEntity>> Filtering = (model) =>
             * // {
             * //     return _dbContext.Rooms.AsQueryable().Where(room => room.Name.StartsWith(model.Name));
             * // };
             *
             * // var fiteredData = await Filtering(filter).ToListAsync();
             *
             * // Filtering Logic2
             * var roomEntities = await filter.ApplyTo(_dbContext.Rooms).ToListAsync();
             * var rooms = roomEntities.Select(room => _mapper.Map<Room>(room)).ToList();
             *
             * // Paging
             * PagedResponse<Room> pageResponse = new PagedResponse<Room>
             * {
             *  Data = rooms,
             *  Links = new Links
             *  {
             *      NextPage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.NextRouteValues)),
             *      PreviousePage = string.Concat(filter.RouteName, _urlHelper.RouteUrl(filter.PreviousRouteValues))
             *  }
             * };
             *
             * return pageResponse;
             */
        }