77using JsonApiDotNetCore . MongoDb . Resources ;
88using JsonApiDotNetCore . Queries ;
99using JsonApiDotNetCore . Queries . Expressions ;
10- using JsonApiDotNetCore . Queries . Internal . QueryableBuilding ;
10+ using JsonApiDotNetCore . Queries . QueryableBuilding ;
1111using JsonApiDotNetCore . Repositories ;
1212using JsonApiDotNetCore . Resources ;
1313using JsonApiDotNetCore . Resources . Annotations ;
@@ -29,28 +29,31 @@ public class MongoRepository<TResource, TId> : IResourceRepository<TResource, TI
2929 private readonly IResourceFactory _resourceFactory ;
3030 private readonly IEnumerable < IQueryConstraintProvider > _constraintProviders ;
3131 private readonly IResourceDefinitionAccessor _resourceDefinitionAccessor ;
32+ private readonly IQueryableBuilder _queryableBuilder ;
3233
3334 protected virtual IMongoCollection < TResource > Collection => _mongoDataAccess . MongoDatabase . GetCollection < TResource > ( typeof ( TResource ) . Name ) ;
3435
3536 /// <inheritdoc />
3637 public virtual string ? TransactionId => _mongoDataAccess . TransactionId ;
3738
3839 public MongoRepository ( IMongoDataAccess mongoDataAccess , ITargetedFields targetedFields , IResourceGraph resourceGraph , IResourceFactory resourceFactory ,
39- IEnumerable < IQueryConstraintProvider > constraintProviders , IResourceDefinitionAccessor resourceDefinitionAccessor )
40+ IEnumerable < IQueryConstraintProvider > constraintProviders , IResourceDefinitionAccessor resourceDefinitionAccessor , IQueryableBuilder queryableBuilder )
4041 {
4142 ArgumentGuard . NotNull ( mongoDataAccess ) ;
4243 ArgumentGuard . NotNull ( targetedFields ) ;
4344 ArgumentGuard . NotNull ( resourceGraph ) ;
4445 ArgumentGuard . NotNull ( resourceFactory ) ;
4546 ArgumentGuard . NotNull ( constraintProviders ) ;
4647 ArgumentGuard . NotNull ( resourceDefinitionAccessor ) ;
48+ ArgumentGuard . NotNull ( queryableBuilder ) ;
4749
4850 _mongoDataAccess = mongoDataAccess ;
4951 _targetedFields = targetedFields ;
5052 _resourceGraph = resourceGraph ;
5153 _resourceFactory = resourceFactory ;
5254 _constraintProviders = constraintProviders ;
5355 _resourceDefinitionAccessor = resourceDefinitionAccessor ;
56+ _queryableBuilder = queryableBuilder ;
5457
5558 if ( ! typeof ( TResource ) . IsAssignableTo ( typeof ( IMongoIdentifiable ) ) )
5659 {
@@ -112,12 +115,9 @@ protected virtual IMongoQueryable<TResource> ApplyQueryLayer(QueryLayer queryLay
112115 source = queryableHandler . Apply ( source ) ;
113116 }
114117
115- var nameFactory = new LambdaParameterNameFactory ( ) ;
118+ var context = QueryableBuilderContext . CreateRoot ( source , typeof ( Queryable ) , new MongoModel ( _resourceGraph ) , null ) ;
119+ Expression expression = _queryableBuilder . ApplyQuery ( queryLayer , context ) ;
116120
117- var builder = new QueryableBuilder ( source . Expression , source . ElementType , typeof ( Queryable ) , nameFactory , _resourceFactory ,
118- new MongoModel ( _resourceGraph ) ) ;
119-
120- Expression expression = builder . ApplyQuery ( queryLayer ) ;
121121 return ( IMongoQueryable < TResource > ) source . Provider . CreateQuery < TResource > ( expression ) ;
122122 }
123123
0 commit comments