diff --git a/.sqlx/query-091ccc5f03da1f11d8efafe1a0082e62f7973dc2d35835693dd5bdd696759de0.json b/.sqlx/query-091ccc5f03da1f11d8efafe1a0082e62f7973dc2d35835693dd5bdd696759de0.json new file mode 100644 index 0000000..8d30f47 --- /dev/null +++ b/.sqlx/query-091ccc5f03da1f11d8efafe1a0082e62f7973dc2d35835693dd5bdd696759de0.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT OR IGNORE INTO queue (hash, date, priority) VALUES (?, ?, 1)", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "091ccc5f03da1f11d8efafe1a0082e62f7973dc2d35835693dd5bdd696759de0" +} diff --git a/src/server/web.rs b/src/server/web.rs index a74c4c2..761f608 100644 --- a/src/server/web.rs +++ b/src/server/web.rs @@ -6,7 +6,10 @@ mod queue; mod r#static; mod worker; -use axum::{routing::get, Router}; +use axum::{ + routing::{get, post}, + Router, +}; use crate::{config::Config, somehow}; @@ -46,9 +49,10 @@ pub async fn run(server: Server) -> somehow::Result<()> { let app = Router::new() .route("/", get(index::get)) .route("/commit/:hash", get(commit::get)) - .route("/worker/:name", get(worker::get)) + .route("/commit/:hash/enqueue", post(commit::post_enqueue)) .route("/queue/", get(queue::get)) .route("/queue/inner", get(queue::get_inner)) + .route("/worker/:name", get(worker::get)) .merge(api::router(&server)) .fallback(get(r#static::static_handler)) .with_state(server.clone()); diff --git a/src/server/web/commit.rs b/src/server/web/commit.rs index d7221d4..6c2dea4 100644 --- a/src/server/web/commit.rs +++ b/src/server/web/commit.rs @@ -2,10 +2,11 @@ use askama::Template; use axum::{ extract::{Path, State}, http::StatusCode, - response::{IntoResponse, Response}, + response::{IntoResponse, Redirect, Response}, }; use futures::TryStreamExt; use sqlx::SqlitePool; +use time::OffsetDateTime; use crate::{config::Config, server::util, somehow}; @@ -98,3 +99,20 @@ pub async fn get( } .into_response()) } + +pub async fn post_enqueue( + Path(hash): Path, + State(config): State<&'static Config>, + State(db): State, +) -> somehow::Result { + let date = OffsetDateTime::now_utc(); + sqlx::query!( + "INSERT OR IGNORE INTO queue (hash, date, priority) VALUES (?, ?, 1)", + hash, + date, + ) + .execute(&db) + .await?; + + Ok(Redirect::to(&format!("{}queue/", config.web_base))) +} diff --git a/templates/commit.html b/templates/commit.html index 9ca8893..bef213d 100644 --- a/templates/commit.html +++ b/templates/commit.html @@ -33,4 +33,8 @@
{{ message }}
+ +
+ +
{% endblock %}