workout/src/pages/workouts.rs

46 lines
1.3 KiB
Rust

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<AppState> {
Router::new()
.route("/", get(page))
.nest("/new", new::routes())
.nest("/{id}", id::routes())
}
async fn page(State(state): State<AppState>) -> Result<Markup, AppError> {
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"))
}