@@ -68,31 +68,35 @@ static Connection<T> Range<T>(
6868 return Build ( skip , take , count , page ) ;
6969 }
7070
71- public static Task < Connection < TItem > > ApplyConnectionContext < TSource , TItem > (
71+ public static Task < Connection < TItem > > ApplyConnectionContext < TDbContext , TSource , TItem > (
7272 this IQueryable < TItem > queryable ,
7373 int ? first ,
7474 string afterString ,
7575 int ? last ,
7676 string beforeString ,
7777 IResolveFieldContext < TSource > context ,
7878 Cancel cancel ,
79- Filters filters )
79+ Filters < TDbContext > ? filters ,
80+ TDbContext data )
8081 where TItem : class
82+ where TDbContext : DbContext
8183 {
8284 Parse ( afterString , beforeString , out var after , out var before ) ;
83- return ApplyConnectionContext ( queryable , first , after , last , before , context , filters , cancel ) ;
85+ return ApplyConnectionContext ( queryable , first , after , last , before , context , filters , cancel , data ) ;
8486 }
8587
86- public static async Task < Connection < TItem > > ApplyConnectionContext < TSource , TItem > (
88+ public static async Task < Connection < TItem > > ApplyConnectionContext < TDbContext , TSource , TItem > (
8789 IQueryable < TItem > queryable ,
8890 int ? first ,
8991 int ? after ,
9092 int ? last ,
9193 int ? before ,
9294 IResolveFieldContext < TSource > context ,
93- Filters filters ,
94- Cancel cancel = default )
95+ Filters < TDbContext > ? filters ,
96+ Cancel cancel ,
97+ TDbContext data )
9598 where TItem : class
99+ where TDbContext : DbContext
96100 {
97101 if ( queryable is not IOrderedQueryable < TItem > )
98102 {
@@ -102,22 +106,24 @@ public static async Task<Connection<TItem>> ApplyConnectionContext<TSource, TIte
102106 cancel . ThrowIfCancellationRequested ( ) ;
103107 if ( last is null )
104108 {
105- return await First ( queryable , first . GetValueOrDefault ( 0 ) , after , before , count , context , filters , cancel ) ;
109+ return await First ( queryable , first . GetValueOrDefault ( 0 ) , after , before , count , context , filters , cancel , data ) ;
106110 }
107111
108- return await Last ( queryable , last . Value , after , before , count , context , filters , cancel ) ;
112+ return await Last ( queryable , last . Value , after , before , count , context , filters , cancel , data ) ;
109113 }
110114
111- static Task < Connection < TItem > > First < TSource , TItem > (
115+ static Task < Connection < TItem > > First < TDbContext , TSource , TItem > (
112116 IQueryable < TItem > queryable ,
113117 int first ,
114118 int ? after ,
115119 int ? before ,
116120 int count ,
117121 IResolveFieldContext < TSource > context ,
118- Filters filters ,
119- Cancel cancel )
122+ Filters < TDbContext > ? filters ,
123+ Cancel cancel ,
124+ TDbContext data )
120125 where TItem : class
126+ where TDbContext : DbContext
121127 {
122128 int skip ;
123129 if ( before is null )
@@ -129,19 +135,21 @@ static Task<Connection<TItem>> First<TSource, TItem>(
129135 skip = Math . Max ( before . Value - first , 0 ) ;
130136 }
131137
132- return Range ( queryable , skip , first , count , context , filters , cancel ) ;
138+ return Range ( queryable , skip , first , count , context , filters , cancel , data ) ;
133139 }
134140
135- static Task < Connection < TItem > > Last < TSource , TItem > (
141+ static Task < Connection < TItem > > Last < TDbContext , TSource , TItem > (
136142 IQueryable < TItem > queryable ,
137143 int last ,
138144 int ? after ,
139145 int ? before ,
140146 int count ,
141147 IResolveFieldContext < TSource > context ,
142- Filters filters ,
143- Cancel cancel )
148+ Filters < TDbContext > ? filters ,
149+ Cancel cancel ,
150+ TDbContext data )
144151 where TItem : class
152+ where TDbContext : DbContext
145153 {
146154 int skip ;
147155 if ( after is null )
@@ -155,23 +163,28 @@ static Task<Connection<TItem>> Last<TSource, TItem>(
155163 skip = after . Value + 1 ;
156164 }
157165
158- return Range ( queryable , skip , take : last , count , context , filters , cancel ) ;
166+ return Range ( queryable , skip , take : last , count , context , filters , cancel , data ) ;
159167 }
160168
161- static async Task < Connection < TItem > > Range < TSource , TItem > (
169+ static async Task < Connection < TItem > > Range < TDbContext , TSource , TItem > (
162170 IQueryable < TItem > queryable ,
163171 int skip ,
164172 int take ,
165173 int count ,
166174 IResolveFieldContext < TSource > context ,
167- Filters filters ,
168- Cancel cancel )
175+ Filters < TDbContext > ? filters ,
176+ Cancel cancel ,
177+ TDbContext data )
169178 where TItem : class
179+ where TDbContext : DbContext
170180 {
171181 var page = queryable . Skip ( skip ) . Take ( take ) ;
172182 QueryLogger . Write ( page ) ;
173183 IEnumerable < TItem > result = await page . ToListAsync ( cancel ) ;
174- result = await filters . ApplyFilter ( result , context . UserContext , context . User ) ;
184+ if ( filters != null )
185+ {
186+ result = await filters . ApplyFilter ( result , context . UserContext , data , context . User ) ;
187+ }
175188
176189 cancel . ThrowIfCancellationRequested ( ) ;
177190 return Build ( skip , take , count , result ) ;
0 commit comments