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| { 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)) }