diff --git a/src/api/database/export.rs b/src/api/database/export.rs new file mode 100644 index 0000000..c292ec2 --- /dev/null +++ b/src/api/database/export.rs @@ -0,0 +1,234 @@ +//! 数据导出:Axum 流式路由(大文件不走 JSON 序列化)。 +//! +//! 鉴权镜像 [`crate::api::upload`]:从 cookie 取 session,校验管理员。 +//! 两种来源:按表导出(表名白名单)/ 按查询导出(强制只读,AST 校验)。 +//! 两种格式:CSV(COPY TO STDOUT 流式)/ SQL(逐行拼 INSERT)。 + +#![allow(clippy::unused_unit)] + +use axum::body::Body; +use axum::extract::Query; +use axum::http::{header, HeaderMap, StatusCode}; +use axum::response::IntoResponse; +use futures::StreamExt; +use serde::Deserialize; + +use crate::auth::session::parse_session_token; + +#[derive(Deserialize)] +pub struct ExportParams { + /// `table:` 或 `query: