@@ -5,6 +5,7 @@ use crate::biz;
5
5
use crate :: biz:: collab:: ops:: {
6
6
get_user_favorite_folder_views, get_user_recent_folder_views, get_user_trash_folder_views,
7
7
} ;
8
+ use crate :: biz:: collab:: utils:: collab_from_doc_state;
8
9
use crate :: biz:: user:: user_verify:: verify_token;
9
10
use crate :: biz:: workspace;
10
11
use crate :: biz:: workspace:: ops:: {
@@ -140,6 +141,10 @@ pub fn workspace_scope() -> Scope {
140
141
web:: resource ( "/v1/{workspace_id}/collab/{object_id}" )
141
142
. route ( web:: get ( ) . to ( v1_get_collab_handler) ) ,
142
143
)
144
+ . service (
145
+ web:: resource ( "/v1/{workspace_id}/collab/{object_id}/json" )
146
+ . route ( web:: get ( ) . to ( get_collab_json_handler) ) ,
147
+ )
143
148
. service (
144
149
web:: resource ( "/v1/{workspace_id}/collab/{object_id}/full-sync" )
145
150
. route ( web:: post ( ) . to ( collab_full_sync_handler) ) ,
@@ -1048,6 +1053,43 @@ async fn v1_get_collab_handler(
1048
1053
Ok ( Json ( AppResponse :: Ok ( ) . with_data ( resp) ) )
1049
1054
}
1050
1055
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
+
1051
1093
#[ instrument( level = "debug" , skip_all) ]
1052
1094
async fn post_web_update_handler (
1053
1095
user_uuid : UserUuid ,
0 commit comments