chuanyue-service/api/src/router.rs
2024-05-30 17:50:33 +08:00

37 lines
1.4 KiB
Rust

use crate::controller;
use axum::body::Body;
use axum::http::Request;
use axum::routing::{get, post};
use axum::Router;
use tower_http::trace::TraceLayer;
pub(crate) fn init() -> Router {
let open = Router::new().route("/", get(|| async { "hello" }));
let auth: Router = Router::new()
.route("/account/google", post(controller::account::authenticate_google))
.route("/feedback", post(controller::feedback::add_feedback).get(controller::feedback::get_feedback_list_by_page))
.layer(axum::middleware::from_fn(library::middleware::req_token::authenticate_access_token));
Router::new()
.nest("/", open)
.nest("/v1", auth)
.layer(axum::middleware::from_fn(library::middleware::req_log::handle))
.layer(axum::middleware::from_fn(library::middleware::cors::handle))
.layer(
TraceLayer::new_for_http().make_span_with(|request: &Request<Body>| {
let req_id = match request
.headers()
.get("x-request-id")
.and_then(|value| value.to_str().ok())
{
Some(v) => v.to_string(),
None => String::from("unknown"),
};
tracing::error_span!("request_id", id = req_id)
}),
)
.layer(axum::middleware::from_fn(library::middleware::req_id::handle))
}