use crate::{AppError, icons, layouts, util::AppState}; use axum::{Router, extract::State, routing::get}; use maud::{Markup, html}; mod id; mod new; pub fn routes() -> Router { Router::new() .route("/", get(page)) .nest("/new", new::routes()) .nest("/{id}", id::routes()) } async fn page(State(state): State) -> Result { let workouts = sqlx::query_as!( crate::models::Workout, "SELECT workout_id, name, description FROM workouts" ) .fetch_all(&state.pool) .await?; let content = html! { h1 { "Workouts" } a href="/workouts/new" { "new workout +" } div class="list" { @for workout in workouts { a href={ "/workouts/" (workout.workout_id) } class="list-row" { div {} div { div class="font-bold" { (workout.name) } div class="text-xs" { (workout.description) } } div class="btn btn-square btn-ghost" { div class="size-[1.6em]" { (icons::eye()) } } } } } }; Ok(layouts::desktop(content, "Workouts")) }