@@ -5,6 +5,7 @@ use crate::biz;
55use  crate :: biz:: collab:: ops:: { 
66  get_user_favorite_folder_views,  get_user_recent_folder_views,  get_user_trash_folder_views, 
77} ; 
8+ use  crate :: biz:: collab:: utils:: collab_from_doc_state; 
89use  crate :: biz:: user:: user_verify:: verify_token; 
910use  crate :: biz:: workspace; 
1011use  crate :: biz:: workspace:: ops:: { 
@@ -140,6 +141,10 @@ pub fn workspace_scope() -> Scope {
140141      web:: resource ( "/v1/{workspace_id}/collab/{object_id}" ) 
141142        . route ( web:: get ( ) . to ( v1_get_collab_handler) ) , 
142143    ) 
144+     . service ( 
145+       web:: resource ( "/v1/{workspace_id}/collab/{object_id}/json" ) 
146+         . route ( web:: get ( ) . to ( get_collab_json_handler) ) , 
147+     ) 
143148    . service ( 
144149      web:: resource ( "/v1/{workspace_id}/collab/{object_id}/full-sync" ) 
145150        . route ( web:: post ( ) . to ( collab_full_sync_handler) ) , 
@@ -1048,6 +1053,43 @@ async fn v1_get_collab_handler(
10481053  Ok ( Json ( AppResponse :: Ok ( ) . with_data ( resp) ) ) 
10491054} 
10501055
1056+ async  fn  get_collab_json_handler ( 
1057+   user_uuid :  UserUuid , 
1058+   path :  web:: Path < ( String ,  String ) > , 
1059+   query :  web:: Query < CollabTypeParam > , 
1060+   state :  Data < AppState > , 
1061+ )  -> Result < Json < AppResponse < CollabJsonResponse > > >  { 
1062+   let  ( workspace_id,  object_id)  = path. into_inner ( ) ; 
1063+   let  collab_type = query. into_inner ( ) . collab_type ; 
1064+   let  uid = state
1065+     . user_cache 
1066+     . get_user_uid ( & user_uuid) 
1067+     . await 
1068+     . map_err ( AppResponseError :: from) ?; 
1069+ 
1070+   let  param = QueryCollabParams  { 
1071+     workspace_id, 
1072+     inner :  QueryCollab  { 
1073+       object_id :  object_id. clone ( ) , 
1074+       collab_type, 
1075+     } , 
1076+   } ; 
1077+ 
1078+   let  doc_state = state
1079+     . collab_access_control_storage 
1080+     . get_encode_collab ( GetCollabOrigin :: User  {  uid } ,  param,  true ) 
1081+     . await 
1082+     . map_err ( AppResponseError :: from) ?
1083+     . doc_state ; 
1084+   let  collab = collab_from_doc_state ( doc_state. to_vec ( ) ,  & object_id) ?; 
1085+ 
1086+   let  resp = CollabJsonResponse  { 
1087+     collab :  collab. to_json_value ( ) , 
1088+   } ; 
1089+ 
1090+   Ok ( Json ( AppResponse :: Ok ( ) . with_data ( resp) ) ) 
1091+ } 
1092+ 
10511093#[ instrument( level = "debug" ,  skip_all) ]  
10521094async  fn  post_web_update_handler ( 
10531095  user_uuid :  UserUuid , 
0 commit comments