Skip to content

Commit 82c68ab

Browse files
committed
feat: enable legacy document service feature and add related routes
1 parent 55bc4ea commit 82c68ab

File tree

4 files changed

+75
-38
lines changed

4 files changed

+75
-38
lines changed

server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ edition.workspace = true
66
[features]
77
default = []
88
barffine_extra = []
9+
legacy-doc-service = []
910

1011
[dependencies]
1112
anyhow.workspace = true

server/src/handlers/doc_handlers.rs

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Document handlers
22

33
use anyhow::Error as AnyError;
4-
use axum::extract::ws::{Message, WebSocket, WebSocketUpgrade};
54
use axum::{
65
Json,
76
body::{Body, Bytes},
@@ -13,20 +12,16 @@ use axum::{
1312
response::{IntoResponse, Response},
1413
};
1514
use barffine_core::blob::BlobDescriptor;
16-
use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64};
17-
use serde::Deserialize;
18-
use tokio::sync::broadcast;
19-
use tracing::{error, warn};
2015
use y_octo::{Doc as YoctoDoc, StateVector as YoctoStateVector};
2116

2217
use crate::{
2318
auth::{DocAccessIntent, RpcAccessRequirement, parse_history_timestamp, resolve_doc_access},
2419
doc::{
25-
channels::{comment_attachment_blob_key, doc_channel_key},
20+
channels::comment_attachment_blob_key,
2621
content::{parse_doc_content, parse_doc_markdown},
2722
history, metadata as doc_metadata,
2823
mode::DocPublishMode,
29-
sync::{UpdateBroadcastContext, apply_doc_updates, workspace_snapshot_or_not_found},
24+
sync::workspace_snapshot_or_not_found,
3025
},
3126
error::AppError,
3227
handlers::headers::{
@@ -35,8 +30,7 @@ use crate::{
3530
},
3631
handlers::workspace_handlers::ensure_workspace_exists,
3732
http::{append_set_cookie_headers, http_date_from_datetime},
38-
socket::rooms::SpaceType,
39-
state::{AppState, SyncEventKind},
33+
state::AppState,
4034
types::{
4135
AuthenticatedRestSession, DocContentQuery, DocContentResponse, DocMarkdownResponse,
4236
DocumentHistoryItem, DocumentMetadataResponse, HistoryQuery, PublishDocRequest,
@@ -46,9 +40,29 @@ use crate::{
4640
attachments::apply_attachment_headers,
4741
crdt::{decode_state_vector, encode_state_vector},
4842
},
49-
workspace::service::{AccessTokenContext, AccessTokenVerification},
5043
};
5144

45+
#[cfg(feature = "legacy-doc-service")]
46+
use axum::extract::ws::{Message, WebSocket, WebSocketUpgrade};
47+
#[cfg(feature = "legacy-doc-service")]
48+
use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64};
49+
#[cfg(feature = "legacy-doc-service")]
50+
use tokio::sync::broadcast;
51+
#[cfg(feature = "legacy-doc-service")]
52+
use crate::state::SyncEventKind;
53+
#[cfg(feature = "legacy-doc-service")]
54+
use crate::doc::channels::doc_channel_key;
55+
#[cfg(feature = "legacy-doc-service")]
56+
use crate::doc::sync::{UpdateBroadcastContext, apply_doc_updates};
57+
#[cfg(feature = "legacy-doc-service")]
58+
use crate::socket::rooms::SpaceType;
59+
#[cfg(feature = "legacy-doc-service")]
60+
use crate::workspace::service::{AccessTokenContext, AccessTokenVerification};
61+
#[cfg(feature = "legacy-doc-service")]
62+
use tracing::{error, warn};
63+
#[cfg(feature = "legacy-doc-service")]
64+
use serde::Deserialize;
65+
5266
pub(crate) async fn get_doc_content_handler(
5367
Path((workspace_id, doc_id)): Path<(String, String)>,
5468
State(state): State<AppState>,
@@ -58,6 +72,7 @@ pub(crate) async fn get_doc_content_handler(
5872
Ok(Json(response))
5973
}
6074

75+
#[cfg(feature = "legacy-doc-service")]
6176
pub(crate) async fn get_rpc_doc_content_handler(
6277
Path((workspace_id, doc_id)): Path<(String, String)>,
6378
State(state): State<AppState>,
@@ -154,6 +169,7 @@ pub(crate) async fn get_doc_markdown_handler(
154169
Ok(Json(response))
155170
}
156171

172+
#[cfg(feature = "legacy-doc-service")]
157173
pub(crate) async fn get_rpc_doc_markdown_handler(
158174
Path((workspace_id, doc_id)): Path<(String, String)>,
159175
State(state): State<AppState>,
@@ -182,6 +198,7 @@ pub(crate) async fn get_doc_diff_handler(
182198
.await
183199
}
184200

201+
#[cfg(feature = "legacy-doc-service")]
185202
pub(crate) async fn get_rpc_doc_diff_handler(
186203
Path((workspace_id, doc_id)): Path<(String, String)>,
187204
State(state): State<AppState>,
@@ -216,6 +233,7 @@ pub(crate) async fn get_doc_binary_handler(
216233
.await
217234
}
218235

236+
#[cfg(feature = "legacy-doc-service")]
219237
pub(crate) async fn get_rpc_doc_binary_handler(
220238
Path((workspace_id, doc_id)): Path<(String, String)>,
221239
State(state): State<AppState>,
@@ -478,6 +496,7 @@ async fn doc_diff_response(
478496
Ok(response)
479497
}
480498

499+
#[cfg(feature = "legacy-doc-service")]
481500
fn require_rpc_doc_token(
482501
state: &AppState,
483502
headers: &HeaderMap,
@@ -597,6 +616,7 @@ where
597616
Ok(auth)
598617
}
599618

619+
#[cfg(feature = "legacy-doc-service")]
600620
pub(crate) async fn doc_ws_handler(
601621
ws: WebSocketUpgrade,
602622
Path((workspace_id, doc_id)): Path<(String, String)>,
@@ -609,6 +629,7 @@ pub(crate) async fn doc_ws_handler(
609629
})
610630
}
611631

632+
#[cfg(feature = "legacy-doc-service")]
612633
async fn handle_doc_websocket(
613634
mut socket: WebSocket,
614635
state: AppState,
@@ -750,6 +771,7 @@ pub(crate) async fn unpublish_doc_handler(
750771
Ok(response)
751772
}
752773

774+
#[cfg(feature = "legacy-doc-service")]
753775
async fn process_incoming_ws_message(
754776
state: &AppState,
755777
workspace_id: &str,

server/src/handlers/workspace_handlers.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ pub(crate) async fn get_workspace_content_handler(
7171
Ok(Json(response))
7272
}
7373

74+
#[allow(dead_code)]
75+
#[cfg(feature = "legacy-doc-service")]
7476
pub(crate) async fn get_rpc_workspace_content_handler(
7577
Path(workspace_id): Path<String>,
7678
State(workspaces): State<Arc<WorkspaceService>>,

server/src/router.rs

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ fn build_base_router(state: AppState) -> Router {
105105
"/api/workspaces/{workspace_id}/content",
106106
get(get_workspace_content_handler),
107107
)
108-
.route(
109-
"/rpc/workspaces/{workspace_id}/content",
110-
get(get_rpc_workspace_content_handler),
111-
)
112108
.route(
113109
"/workspaces/{workspace_id}/blobs/{name}",
114110
get(get_workspace_blob_handler),
@@ -126,10 +122,6 @@ fn build_base_router(state: AppState) -> Router {
126122
"/api/workspaces/{workspace_id}/docs/{doc_id}",
127123
get(get_doc_binary_handler),
128124
)
129-
.route(
130-
"/rpc/workspaces/{workspace_id}/docs/{doc_id}",
131-
get(get_rpc_doc_binary_handler),
132-
)
133125
.route(
134126
"/workspaces/{workspace_id}/docs/{doc_id}/content",
135127
get(get_doc_content_handler),
@@ -138,10 +130,6 @@ fn build_base_router(state: AppState) -> Router {
138130
"/api/workspaces/{workspace_id}/docs/{doc_id}/content",
139131
get(get_doc_content_handler),
140132
)
141-
.route(
142-
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/content",
143-
get(get_rpc_doc_content_handler),
144-
)
145133
.route(
146134
"/workspaces/{workspace_id}/docs/{doc_id}/markdown",
147135
get(get_doc_markdown_handler),
@@ -150,10 +138,6 @@ fn build_base_router(state: AppState) -> Router {
150138
"/api/workspaces/{workspace_id}/docs/{doc_id}/markdown",
151139
get(get_doc_markdown_handler),
152140
)
153-
.route(
154-
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/markdown",
155-
get(get_rpc_doc_markdown_handler),
156-
)
157141
.route(
158142
"/workspaces/{workspace_id}/docs/{doc_id}/diff",
159143
post(get_doc_diff_handler),
@@ -162,10 +146,6 @@ fn build_base_router(state: AppState) -> Router {
162146
"/api/workspaces/{workspace_id}/docs/{doc_id}/diff",
163147
post(get_doc_diff_handler),
164148
)
165-
.route(
166-
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/diff",
167-
post(get_rpc_doc_diff_handler),
168-
)
169149
.route(
170150
"/workspaces/{workspace_id}/docs/{doc_id}/public",
171151
post(publish_doc_handler).delete(unpublish_doc_handler),
@@ -190,14 +170,6 @@ fn build_base_router(state: AppState) -> Router {
190170
"/api/workspaces/{workspace_id}/docs/{doc_id}/histories/{timestamp}",
191171
get(get_doc_history_snapshot_handler),
192172
)
193-
.route(
194-
"/workspaces/{workspace_id}/docs/{doc_id}/ws",
195-
get(doc_ws_handler),
196-
)
197-
.route(
198-
"/api/workspaces/{workspace_id}/docs/{doc_id}/ws",
199-
get(doc_ws_handler),
200-
)
201173
.route(
202174
"/workspaces/{workspace_id}/docs/{doc_id}/comment-attachments/{key}",
203175
get(get_comment_attachment_handler),
@@ -214,6 +186,8 @@ fn build_base_router(state: AppState) -> Router {
214186
.options(graphql::graphql_options_handler),
215187
);
216188

189+
let router = add_legacy_doc_service_routes(router);
190+
217191
let router = router
218192
.layer(socket_layer)
219193
.layer(
@@ -237,3 +211,41 @@ fn build_base_router(state: AppState) -> Router {
237211
.layer(observability::request_context_layer())
238212
.with_state(state)
239213
}
214+
215+
#[cfg(feature = "legacy-doc-service")]
216+
fn add_legacy_doc_service_routes(router: Router<AppState>) -> Router<AppState> {
217+
router
218+
.route(
219+
"/rpc/workspaces/{workspace_id}/content",
220+
get(get_rpc_workspace_content_handler),
221+
)
222+
.route(
223+
"/rpc/workspaces/{workspace_id}/docs/{doc_id}",
224+
get(get_rpc_doc_binary_handler),
225+
)
226+
.route(
227+
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/content",
228+
get(get_rpc_doc_content_handler),
229+
)
230+
.route(
231+
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/markdown",
232+
get(get_rpc_doc_markdown_handler),
233+
)
234+
.route(
235+
"/rpc/workspaces/{workspace_id}/docs/{doc_id}/diff",
236+
post(get_rpc_doc_diff_handler),
237+
)
238+
.route(
239+
"/workspaces/{workspace_id}/docs/{doc_id}/ws",
240+
get(doc_ws_handler),
241+
)
242+
.route(
243+
"/api/workspaces/{workspace_id}/docs/{doc_id}/ws",
244+
get(doc_ws_handler),
245+
)
246+
}
247+
248+
#[cfg(not(feature = "legacy-doc-service"))]
249+
fn add_legacy_doc_service_routes(router: Router<AppState>) -> Router<AppState> {
250+
router
251+
}

0 commit comments

Comments
 (0)