public async Task <PagedQueryResult <PointQueryResult> > GetAsync(GetPagedResourceQuery resource) { try { async Task <PagedQueryResult <PointQueryResult> > SearchInDataBaseAsync() { var result = await _mongoContext.GetCollection <Point>(MongoCollections.Point) .AsQueryable() .Where(p => p.Active) .Search(p => p.Name.ToLower().Contains(resource.Search.ToLower()), resource.Search) .OrderByDescending(p => p.CreatedAt) .Select(p => new PointQueryResult { Id = p.Id, Name = p.Name }) .GetPagedAsync(resource); return(result); } return(await GetFromCacheIfExist(resource.ToCacheKey(CacheKeys.Routes), SearchInDataBaseAsync)); } catch (Exception ex) { throw new UserFriendlyException("Error to get connections", ex); } }
public async Task <PagedQueryResult <ConnectionQueryResult> > GetAsync(GetPagedResourceQuery resource) { try { async Task <PagedQueryResult <ConnectionQueryResult> > SearchInDataBaseAsync() { var search = resource.Search.ToLower(); return(await _mongoContext.GetCollection <Connection>(MongoCollections.Connection) .AsQueryable() .Where(x => x.Active) .Search(x => x.Origin.Name.ToLower().Contains(search) || x.Destination.Name.ToLower().Contains(search), search) .OrderByDescending(p => p.CreatedAt) .Select(x => new ConnectionQueryResult { Id = x.Id, Cost = x.Cost, Time = x.Time, Origin = new PointQueryResult { Id = x.Origin.Id, Name = x.Origin.Name }, Destination = new PointQueryResult { Id = x.Destination.Id, Name = x.Destination.Name } }).GetPagedAsync(resource)); } return(await GetFromCacheIfExist(resource.ToCacheKey(CacheKeys.Connections), SearchInDataBaseAsync)); } catch (Exception ex) { throw new UserFriendlyException("Error to get connection paged", ex); } }
public async Task <IActionResult> Find([FromQuery] GetPagedResourceQuery resource) { var connections = await _connectionReadOnlyRepository.GetAsync(resource); return(Success(connections)); }
public static async Task <PagedQueryResult <TSource> > GetPagedAsync <TSource>(this IMongoQueryable <TSource> source, GetPagedResourceQuery resource) { var countOfDocuments = source.CountAsync(); var points = source.Skip((resource.Page - 1) * resource.PageSize).Take(resource.PageSize).ToListAsync(); await Task.WhenAll(countOfDocuments, points); return(PagedQueryResult <TSource> .Create(points.Result, countOfDocuments.Result, (countOfDocuments.Result / resource.PageSize))); }
public static string ToCacheKey(this GetPagedResourceQuery resource, string cacheKey) => string.Join(":", cacheKey, resource.Page, resource.PageSize, resource.Search);
public async Task <IActionResult> Get([FromQuery] GetPagedResourceQuery resource) { var routes = await _routeReadOnlyRepository.GetAsync(resource); return(Success(routes)); }