@@ -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