@@ -40,6 +40,10 @@ pub struct FilterParams {
40
40
#[ serde( rename = "filter[provider]" ) ]
41
41
#[ schemars( with = "Option<crate::admin::schema::Ulid>" ) ]
42
42
provider : Option < Ulid > ,
43
+
44
+ /// Retrieve the items with the given subject
45
+ #[ serde( rename = "filter[subject]" ) ]
46
+ subject : Option < String > ,
43
47
}
44
48
45
49
impl std:: fmt:: Display for FilterParams {
@@ -56,6 +60,11 @@ impl std::fmt::Display for FilterParams {
56
60
sep = '&' ;
57
61
}
58
62
63
+ if let Some ( subject) = & self . subject {
64
+ write ! ( f, "{sep}filter[subject]={subject}" ) ?;
65
+ sep = '&' ;
66
+ }
67
+
59
68
let _ = sep;
60
69
Ok ( ( ) )
61
70
}
@@ -166,6 +175,12 @@ pub async fn handler(
166
175
filter
167
176
} ;
168
177
178
+ let filter = if let Some ( subject) = & params. subject {
179
+ filter. for_subject ( subject)
180
+ } else {
181
+ filter
182
+ } ;
183
+
169
184
let page = repo. upstream_oauth_link ( ) . list ( filter, pagination) . await ?;
170
185
let count = repo. upstream_oauth_link ( ) . count ( filter) . await ?;
171
186
@@ -443,5 +458,45 @@ mod tests {
443
458
}
444
459
}
445
460
"### ) ;
461
+
462
+ // Filter by subject
463
+ let request = Request :: get ( format ! (
464
+ "/api/admin/v1/upstream-oauth-links?filter[subject]={}" ,
465
+ "subject1"
466
+ ) )
467
+ . bearer ( & token)
468
+ . empty ( ) ;
469
+
470
+ let response = state. request ( request) . await ;
471
+ response. assert_status ( StatusCode :: OK ) ;
472
+ let body: serde_json:: Value = response. json ( ) ;
473
+ assert_json_snapshot ! ( body, @r###"
474
+ {
475
+ "meta": {
476
+ "count": 1
477
+ },
478
+ "data": [
479
+ {
480
+ "type": "upstream-oauth-link",
481
+ "id": "01FSHN9AG0AQZQP8DX40GD59PW",
482
+ "attributes": {
483
+ "created_at": "2022-01-16T14:40:00Z",
484
+ "provider_id": "01FSHN9AG09NMZYX8MFYH578R9",
485
+ "subject": "subject1",
486
+ "user_id": "01FSHN9AG0MZAA6S4AF7CTV32E",
487
+ "human_account_name": "alice@acme"
488
+ },
489
+ "links": {
490
+ "self": "/api/admin/v1/upstream-oauth-links/01FSHN9AG0AQZQP8DX40GD59PW"
491
+ }
492
+ }
493
+ ],
494
+ "links": {
495
+ "self": "/api/admin/v1/upstream-oauth-links?filter[subject]=subject1&page[first]=10",
496
+ "first": "/api/admin/v1/upstream-oauth-links?filter[subject]=subject1&page[first]=10",
497
+ "last": "/api/admin/v1/upstream-oauth-links?filter[subject]=subject1&page[last]=10"
498
+ }
499
+ }
500
+ "### ) ;
446
501
}
447
502
}
0 commit comments