diff --git a/src/router/routes/scripts.rs b/src/router/routes/scripts.rs index a170a1b..5a58349 100644 --- a/src/router/routes/scripts.rs +++ b/src/router/routes/scripts.rs @@ -1,14 +1,37 @@ -use axum::response::{Html, IntoResponse}; +use axum::{ + extract::State, + http::StatusCode, + response::{Html, IntoResponse}, +}; +use sqlx::SqlitePool; +use std::fmt::Write; +use tracing::{error, instrument}; -pub async fn get_scripts() -> impl IntoResponse { - Html( - r##" -
- - -
"##, - ) +#[instrument(skip_all)] +pub async fn get_scripts(State(database): State) -> impl IntoResponse { + let scripts = match crate::db::list_scripts(&database).await { + Ok(scripts) => scripts, + Err(e) => { + error!(err = e, "list_scripts"); + return Err(StatusCode::INTERNAL_SERVER_ERROR); + } + }; + + let content = scripts.iter().fold(String::new(), |mut acc, x| { + if let Err(e) = write!(acc, "
  • {} [", x.1.name()) { + error!(err = e.to_string(), script=?x ,"failed to write name"); + return String::new(); + } + if let Err(e) = write!(acc, "{}]
  • ", x.0) { + error!(err = e.to_string(), script=?x ,"failed to write id"); + return String::new(); + } + acc + }); + + let output = format!( + r##"
    "## + ); + + Ok(Html(output)) }