Files
mnote/rust/crates/storage-convex-bridge/src/mapping.rs
T

124 lines
4.8 KiB
Rust
Raw Normal View History

2026-04-14 13:22:29 +08:00
use crate::context::BridgeContext;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ConvexMutationRequest {
pub function_name: String,
pub deployment_id: Option<String>,
pub project_id: Option<String>,
pub workspace_id: Option<String>,
pub request_id: String,
pub trace_id: String,
pub idempotency_key: Option<String>,
pub actor_id: String,
pub payload_json: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ConvexQueryRequest {
pub function_name: String,
pub deployment_id: Option<String>,
pub project_id: Option<String>,
pub workspace_id: Option<String>,
pub request_id: String,
pub trace_id: String,
pub actor_id: String,
pub payload_json: String,
}
pub fn map_command_name_to_convex(command_name: &str) -> &'static str {
match command_name {
"create_workspace" => "workspaces:create",
"create_page" => "pages:create",
2026-04-15 20:01:12 +08:00
"documents.create" => "documents:createWithParentReference",
"documents.move" => "documents:move",
"documents.delete" => "documents:softDelete",
"documents.restore" => "documents:restore",
"documents.duplicate" => "documents:duplicateWithMindmaps",
"documents.copy_tree" => "documents:copyTree",
"documents.template" => "documents:setTemplate",
"documents.emptyTrashByWorkspace" => "documents:emptyTrashByWorkspace",
"documents.purge" => "documents:purge",
"blocks.patch" => "documents:updateContent",
"documents.save" => "documents:updateContent",
2026-04-14 13:22:29 +08:00
"documents.title.update" => "documents:updateTitle",
"documents.stats.update" => "documents:updateStats",
"documents.options.update" => "documents:updateOptions",
2026-04-15 20:01:12 +08:00
"mindmaps.put" => "mindmaps:put",
"mindmaps.delete" => "mindmaps:softDelete",
"mindmaps.restore" => "mindmaps:restore",
"mindmaps.purge" => "mindmaps:purge",
"mindmaps.emptyTrashByWorkspace" => "mindmaps:emptyTrashByWorkspace",
2026-04-14 13:22:29 +08:00
"insert_block" => "blocks:insert",
"update_block" => "blocks:update",
"move_block" => "blocks:move",
"delete_block" => "blocks:delete",
2026-04-15 20:01:12 +08:00
"blocks.move" => "blocks:move",
"blocks.embed" => "blocks:insert",
"media.assets.replace_storage" => "mediaAssets:replaceStorageFromUpload",
2026-04-14 13:22:29 +08:00
_ => "commands:unknown",
}
}
pub fn map_query_name_to_convex(query_name: &str) -> &'static str {
match query_name {
2026-04-15 20:01:12 +08:00
"bridge.request.get" => "bridgeLogs:listByRequest",
"bridge.trace.get" => "bridgeLogs:listByTrace",
"bridge.command.get" => "bridgeLogs:listByCommand",
"bridge.workspace.overview" => "bridgeLogs:listWorkspaceOverview",
"documents.meta.get" => "documents:getMeta",
"documents.content.get" => "documents:getContent",
2026-04-15 20:01:12 +08:00
"mindmaps.get" => "mindmaps:get",
"blocks.get" => "blocks:getById",
"sidebar.dataset.list" => "sidebar:datasetList",
2026-04-15 20:01:12 +08:00
"search.documents" => "search:documents",
"search.recent" => "search:recent",
2026-04-14 13:22:29 +08:00
"get_page" => "pages:get",
"list_page_blocks" => "blocks:list_by_page",
"search_pages" => "search:pages",
"search_blocks" => "search:blocks",
_ => "queries:unknown",
}
}
fn json_opt(value: &Option<String>) -> String {
match value {
Some(v) => format!("\"{}\"", v),
None => "null".into(),
}
}
pub fn payload_json_for_command(context: &BridgeContext, command_name: &str) -> String {
format!(
"{{\"kind\":\"command\",\"name\":\"{}\",\"request_id\":\"{}\",\"trace_id\":\"{}\",\"deployment_id\":{},\"project_id\":{},\"workspace_id\":{},\"tenant_id\":{},\"idempotency_key\":{},\"actor\":{{\"type\":\"{}\",\"id\":\"{}\",\"session_id\":{}}},\"source\":{{\"channel\":\"{}\",\"client\":\"{}\"}}}}",
command_name,
context.request_id,
context.trace_id,
json_opt(&context.deployment_id),
json_opt(&context.project_id),
json_opt(&context.workspace_id),
json_opt(&context.tenant_id),
json_opt(&context.idempotency_key),
context.actor_type,
context.actor_id,
json_opt(&context.session_id),
context.source_channel,
context.source_client,
)
}
pub fn payload_json_for_query(context: &BridgeContext, query_name: &str) -> String {
format!(
"{{\"kind\":\"query\",\"name\":\"{}\",\"request_id\":\"{}\",\"trace_id\":\"{}\",\"deployment_id\":{},\"project_id\":{},\"workspace_id\":{},\"tenant_id\":{},\"actor_id\":\"{}\",\"source\":{{\"channel\":\"{}\",\"client\":\"{}\"}}}}",
query_name,
context.request_id,
context.trace_id,
json_opt(&context.deployment_id),
json_opt(&context.project_id),
json_opt(&context.workspace_id),
json_opt(&context.tenant_id),
context.actor_id,
context.source_channel,
context.source_client,
)
}