feat: add script details route
This commit is contained in:
parent
01af05b999
commit
8d8857cace
@ -1,5 +1,5 @@
|
||||
use axum::routing::{get, get_service};
|
||||
use routes::scripts::get_scripts;
|
||||
use routes::scripts::{get_script_by_id, get_scripts};
|
||||
use sqlx::SqlitePool;
|
||||
use tower_http::services::ServeDir;
|
||||
mod routes;
|
||||
@ -8,5 +8,6 @@ pub fn new_router(db: SqlitePool) -> axum::Router {
|
||||
axum::Router::new()
|
||||
.fallback_service(get_service(ServeDir::new("assets")))
|
||||
.route("/scripts", get(get_scripts))
|
||||
.route("/scripts/{id}", get(get_script_by_id))
|
||||
.with_state(db)
|
||||
}
|
||||
|
@ -1,11 +1,45 @@
|
||||
use axum::{
|
||||
extract::State,
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
response::{Html, IntoResponse},
|
||||
};
|
||||
use sqlx::SqlitePool;
|
||||
use std::fmt::Write;
|
||||
use tracing::{error, instrument};
|
||||
use tracing::{error, instrument, warn};
|
||||
|
||||
#[instrument(skip_all)]
|
||||
pub async fn get_script_by_id(
|
||||
State(database): State<SqlitePool>,
|
||||
Path(id): Path<String>,
|
||||
) -> impl IntoResponse {
|
||||
let script = match crate::db::get_script(&database, id).await {
|
||||
Ok(script) => script,
|
||||
Err(e) => {
|
||||
warn!(err = e.to_string(), "get_script");
|
||||
return Err(StatusCode::NOT_FOUND);
|
||||
}
|
||||
};
|
||||
|
||||
let output = format!(
|
||||
r##"<section id="{}"><h1>{}</h1><div id="{}-parameters">{}</div></section>"##,
|
||||
script.0,
|
||||
script.1.name(),
|
||||
script.0,
|
||||
script
|
||||
.1
|
||||
.parameters()
|
||||
.iter()
|
||||
.fold(String::new(), |mut acc, x| {
|
||||
if let Err(e) = write!(acc, "<p>{:?}</p>", x) {
|
||||
error!(err = e.to_string(), script = ?x, "failed to write parameter");
|
||||
return String::new();
|
||||
}
|
||||
acc
|
||||
})
|
||||
);
|
||||
|
||||
Ok(Html(output))
|
||||
}
|
||||
|
||||
#[instrument(skip_all)]
|
||||
pub async fn get_scripts(State(database): State<SqlitePool>) -> impl IntoResponse {
|
||||
@ -18,14 +52,23 @@ pub async fn get_scripts(State(database): State<SqlitePool>) -> impl IntoRespons
|
||||
};
|
||||
|
||||
let content = scripts.iter().fold(String::new(), |mut acc, x| {
|
||||
if let Err(e) = write!(acc, "<li>{} [", x.1.name()) {
|
||||
error!(err = e.to_string(), script=?x ,"failed to write name");
|
||||
return String::new();
|
||||
}
|
||||
if let Err(e) = write!(acc, "{}]</li>", x.0) {
|
||||
error!(err = e.to_string(), script=?x ,"failed to write id");
|
||||
if let Err(e) = write!(
|
||||
acc,
|
||||
r##"<li hx-get="/scripts/{0}" hx-push-url="/scripts/{0}" hx-target="#scripts" hx-swap="outerHTML">{1} [{0}]</li>"##,
|
||||
x.0,
|
||||
x.1.name()
|
||||
) {
|
||||
error!(err = e.to_string(), script=?x ,"failed to write script");
|
||||
return String::new();
|
||||
}
|
||||
// if let Err(e) = write!(acc, "{} [", x.1.name()) {
|
||||
// error!(err = e.to_string(), script=?x ,"failed to write id");
|
||||
// return String::new();
|
||||
// }
|
||||
// if let Err(e) = write!(acc, "{}]</li>", x.0) {
|
||||
// error!(err = e.to_string(), script=?x ,"failed to write id");
|
||||
// return String::new();
|
||||
// }
|
||||
acc
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user