46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use askama::Template;
|
|
use askama_web::WebTemplate;
|
|
use axum::{
|
|
Router,
|
|
routing::{get, post},
|
|
};
|
|
use static_serve::embed_assets;
|
|
|
|
use crate::state::AppState;
|
|
|
|
mod migrations;
|
|
mod models;
|
|
mod routes;
|
|
pub mod state;
|
|
|
|
pub fn build_app(state: AppState) -> Router {
|
|
embed_assets!("assets", compress = true);
|
|
|
|
Router::new()
|
|
.route("/", get(routes::book::index))
|
|
.route("/books/new", get(routes::book::new))
|
|
.route("/books", post(routes::book::create))
|
|
.route("/books/{id}", get(routes::book::show))
|
|
.route("/books/{id}", post(routes::book::update))
|
|
.route("/books/{id}/delete", post(routes::book::delete))
|
|
.route("/books/{id}/edit", get(routes::book::edit))
|
|
.route("/books/download_csv", get(routes::book::download_csv))
|
|
.route("/users", get(routes::user::index))
|
|
.route("/users/new", get(routes::user::new))
|
|
.route("/users/{id}/edit", get(routes::user::edit))
|
|
.route("/users/{id}", post(routes::user::update))
|
|
.route("/users", post(routes::user::create))
|
|
.route("/users/{id}/delete", post(routes::user::delete))
|
|
.nest("/assets", static_router())
|
|
.fallback(error_handler)
|
|
.with_state(state)
|
|
}
|
|
|
|
#[derive(Template, WebTemplate)]
|
|
#[template(path = "404.html")]
|
|
struct NotFoundTemplate {}
|
|
|
|
pub async fn error_handler() -> impl axum::response::IntoResponse {
|
|
NotFoundTemplate {}
|
|
}
|