将 api-server 微信 HTTP/BFF 适配统一迁移到 wechat 目录。 将微信支付和虚拟支付消息协议细节下沉到 platform-wechat。 拆分 platform-wechat 的订阅消息与支付模块并补齐依赖。 修正微信相关测试的用户 ID 夹具并同步后端架构文档。
98 lines
3.6 KiB
Rust
98 lines
3.6 KiB
Rust
use axum::{
|
||
Router,
|
||
extract::DefaultBodyLimit,
|
||
middleware,
|
||
routing::{get, post},
|
||
};
|
||
|
||
use crate::{
|
||
auth::{require_bearer_auth, require_runtime_principal_auth},
|
||
state::AppState,
|
||
wooden_fish::{
|
||
checkpoint_wooden_fish_run, create_wooden_fish_session, execute_wooden_fish_action,
|
||
finish_wooden_fish_run, get_wooden_fish_gallery_detail, get_wooden_fish_runtime_work,
|
||
get_wooden_fish_session, list_wooden_fish_gallery, list_wooden_fish_works,
|
||
publish_wooden_fish_work, start_wooden_fish_run,
|
||
},
|
||
};
|
||
|
||
const WOODEN_FISH_CREATION_BODY_LIMIT_BYTES: usize = 32 * 1024 * 1024;
|
||
|
||
pub fn router(state: AppState) -> Router<AppState> {
|
||
Router::new()
|
||
.route(
|
||
"/api/creation/wooden-fish/sessions",
|
||
post(create_wooden_fish_session)
|
||
// 中文注释:兼容旧小程序把参考图或录音 Data URL 放进创作 JSON 的请求;新前端音频会先直传 OSS。
|
||
.layer(DefaultBodyLimit::max(WOODEN_FISH_CREATION_BODY_LIMIT_BYTES))
|
||
.route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_bearer_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/creation/wooden-fish/sessions/{session_id}",
|
||
get(get_wooden_fish_session).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_bearer_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/creation/wooden-fish/sessions/{session_id}/actions",
|
||
post(execute_wooden_fish_action)
|
||
// 中文注释:compile/regenerate 会携带参考图旧兼容输入,避免 Axum 默认 2MB 先于 handler 拦截。
|
||
.layer(DefaultBodyLimit::max(WOODEN_FISH_CREATION_BODY_LIMIT_BYTES))
|
||
.route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_bearer_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/creation/wooden-fish/works",
|
||
get(list_wooden_fish_works).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_bearer_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/creation/wooden-fish/works/{profile_id}/publish",
|
||
post(publish_wooden_fish_work).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_bearer_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/works/{profile_id}",
|
||
get(get_wooden_fish_runtime_work),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/runs",
|
||
post(start_wooden_fish_run).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_runtime_principal_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/runs/{run_id}/checkpoint",
|
||
post(checkpoint_wooden_fish_run).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_runtime_principal_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/runs/{run_id}/finish",
|
||
post(finish_wooden_fish_run).route_layer(middleware::from_fn_with_state(
|
||
state.clone(),
|
||
require_runtime_principal_auth,
|
||
)),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/gallery",
|
||
get(list_wooden_fish_gallery),
|
||
)
|
||
.route(
|
||
"/api/runtime/wooden-fish/gallery/{public_work_code}",
|
||
get(get_wooden_fish_gallery_detail),
|
||
)
|
||
}
|