@@ -321,6 +321,37 @@ pub async fn fetch_user(
321
321
Ok ( project_users_aggregated)
322
322
}
323
323
324
+ pub async fn fetch_me_user (
325
+ cache : Arc < dyn ProjectDrivenCache > ,
326
+ auth0 : Arc < dyn Auth0Driven > ,
327
+ cmd : FetchMeUserCmd ,
328
+ ) -> Result < ProjectUserAggregated > {
329
+ let user_id = assert_credential ( & cmd. credential ) ?;
330
+ assert_permission ( cache. clone ( ) , & cmd. credential , & cmd. project_id , None ) . await ?;
331
+
332
+ let Some ( project_user) = cache
333
+ . find_user_permission ( & user_id, & cmd. project_id )
334
+ . await ?
335
+ else {
336
+ return Err ( Error :: CommandMalformed (
337
+ "invalid project and user id" . into ( ) ,
338
+ ) ) ;
339
+ } ;
340
+
341
+ let profile = auth0. find_info ( & project_user. user_id ) . await ?;
342
+
343
+ let project_user_aggregated = ProjectUserAggregated {
344
+ user_id : project_user. user_id . clone ( ) ,
345
+ project_id : project_user. project_id ,
346
+ name : profile. name ,
347
+ email : profile. email ,
348
+ role : project_user. role ,
349
+ created_at : project_user. created_at ,
350
+ } ;
351
+
352
+ Ok ( project_user_aggregated)
353
+ }
354
+
324
355
pub async fn delete_user (
325
356
cache : Arc < dyn ProjectDrivenCache > ,
326
357
event : Arc < dyn EventDrivenBridge > ,
@@ -731,6 +762,20 @@ impl FetchUserCmd {
731
762
}
732
763
}
733
764
765
+ #[ derive( Debug , Clone ) ]
766
+ pub struct FetchMeUserCmd {
767
+ pub credential : Credential ,
768
+ pub project_id : String ,
769
+ }
770
+ impl FetchMeUserCmd {
771
+ pub fn new ( credential : Credential , project_id : String ) -> Result < Self > {
772
+ Ok ( Self {
773
+ credential,
774
+ project_id,
775
+ } )
776
+ }
777
+ }
778
+
734
779
#[ derive( Debug , Clone ) ]
735
780
pub struct DeleteUserCmd {
736
781
pub credential : Credential ,
@@ -992,6 +1037,14 @@ mod tests {
992
1037
}
993
1038
}
994
1039
}
1040
+ impl Default for FetchMeUserCmd {
1041
+ fn default ( ) -> Self {
1042
+ Self {
1043
+ credential : Credential :: Auth0 ( "user id" . into ( ) ) ,
1044
+ project_id : Uuid :: new_v4 ( ) . to_string ( ) ,
1045
+ }
1046
+ }
1047
+ }
995
1048
impl Default for DeleteUserCmd {
996
1049
fn default ( ) -> Self {
997
1050
Self {
@@ -1837,4 +1890,22 @@ mod tests {
1837
1890
let result = delete ( Arc :: new ( cache) , Arc :: new ( event) , cmd) . await ;
1838
1891
assert ! ( result. is_err( ) ) ;
1839
1892
}
1893
+
1894
+ #[ tokio:: test]
1895
+ async fn it_should_fetch_me_project_user ( ) {
1896
+ let mut cache = MockProjectDrivenCache :: new ( ) ;
1897
+ cache
1898
+ . expect_find_user_permission ( )
1899
+ . returning ( |_, _| Ok ( Some ( ProjectUser :: default ( ) ) ) ) ;
1900
+
1901
+ let mut auth0 = MockAuth0Driven :: new ( ) ;
1902
+ auth0
1903
+ . expect_find_info ( )
1904
+ . return_once ( |_| Ok ( Auth0Profile :: default ( ) ) ) ;
1905
+
1906
+ let cmd = FetchMeUserCmd :: default ( ) ;
1907
+
1908
+ let result = fetch_me_user ( Arc :: new ( cache) , Arc :: new ( auth0) , cmd) . await ;
1909
+ assert ! ( result. is_ok( ) ) ;
1910
+ }
1840
1911
}
0 commit comments