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))
}