use crate::html::{api, blog, AppState}; use axum::{ http::StatusCode, response::{IntoResponse, Redirect}, routing::{get, Router}, Extension, }; use sqlx::PgPool; use tower_http::services::ServeDir; use super::{garden, get_page}; pub fn get_router(pool: PgPool) -> Router { let assets_path = std::env::current_dir().unwrap(); let state = AppState { db: pool }; Router::new() .nest("/api", api::get_router()) .nest("/blog", blog::get_router()) .nest("/garden", garden::get_router()) .nest_service( "/assets", ServeDir::new(format!("{}/assets", assets_path.to_str().unwrap())), ) .route("/", get(home)) .route("/now", get(now)) .route("/about", get(about)) .route("/contact", get(contact)) .route("/uses", get(uses)) .route("/ai", get(ai)) .route("/blogroll", get(blogroll)) .route( "/robots.txt", get(|| async { Redirect::permanent("/assets/robots.txt") }), ) .layer(Extension(state)) } async fn home(state: Extension) -> Result { get_page(&state.db, "home").await } async fn now(state: Extension) -> Result { get_page(&state.db, "now").await } async fn about(state: Extension) -> Result { get_page(&state.db, "about").await } async fn contact(state: Extension) -> Result { get_page(&state.db, "contact").await } async fn uses(state: Extension) -> Result { get_page(&state.db, "uses").await } async fn ai(state: Extension) -> Result { get_page(&state.db, "ai").await } async fn blogroll(state: Extension) -> Result { get_page(&state.db, "blogroll").await }