public RepositoryQuery(IRepositories repositories, IPackages packages, IIndexer indexer) { FieldAsync <ListGraphType <RepositoryType> >( "repositories", arguments: new QueryArguments( new QueryArgument <IntGraphType> { Name = "size" }, new QueryArgument <IntGraphType> { Name = "offset" }), resolve: async context => { var offset = context.GetArgument <int?>("offset"); var size = context.GetArgument <int?>("size"); var results = await repositories.GetAllAsync(); return(GraphQLHelpers.PageResults(results, size, offset)); } ); FieldAsync <RepositoryType>( "repository", arguments: new QueryArguments(new QueryArgument <StringGraphType> { Name = "name" }), resolve: async context => { return(await repositories.GetByNameAsync(context.GetArgument <string>("name"))); }); FieldAsync <PackageType>( "package", arguments: new QueryArguments(new QueryArgument <StringGraphType> { Name = "name" }), resolve: async context => { return(await packages.GetByNameAsync(context.GetArgument <string>("name"))); }); FieldAsync <ListGraphType <PackageType> >( "packages", arguments: new QueryArguments( new QueryArgument <StringGraphType> { Name = "category" }, new QueryArgument <ListGraphType <StringGraphType> > { Name = "tags" }, new QueryArgument <StringGraphType> { Name = "name" }, new QueryArgument <StringGraphType> { Name = "location" }, new QueryArgument <StringGraphType> { Name = "search" }, new QueryArgument <IntGraphType> { Name = "size" }, new QueryArgument <IntGraphType> { Name = "offset" }), resolve: async context => { IEnumerable <Entities.Package> results = await packages.GetAllAsync(); var category = context.GetArgument <string>("category"); var name = context.GetArgument <string>("name"); var location = context.GetArgument <string>("location"); var search = context.GetArgument <string>("search"); var tags = context.GetArgument <List <string> >("tags"); var offset = context.GetArgument <int?>("offset"); var size = context.GetArgument <int?>("size"); if (category != null) { results = results.Where(x => x.category?.Equals(category, StringComparison.InvariantCultureIgnoreCase) == true); } if (tags != null) { results = results.Where(r => r.tags?.Any(t => tags.Any(st => st.Equals(t, StringComparison.InvariantCultureIgnoreCase))) == true); } if (name != null) { results = results.Where(x => x.name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); } if (location != null) { results = results.Where(x => x.location == location); } if (search != null) { var matches = await indexer.Search(search, offset, size); if (matches.Any()) { return(results.Where(x => matches.Contains(x.location))); } else { return(null); } } return(GraphQLHelpers.PageResults(results, size, offset)); }); }
public async Task <IEnumerable <Package> > GetAllAsync() { return((await repositories.GetAllAsync()).SelectMany(x => x.packages)); }