Add "Enqueue" button to commits

This commit is contained in:
Joscha 2023-08-11 16:50:32 +02:00
parent 5e0b8e3c8c
commit 48693d3f1c
4 changed files with 41 additions and 3 deletions

View file

@ -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"
}

View file

@ -6,7 +6,10 @@ mod queue;
mod r#static; mod r#static;
mod worker; mod worker;
use axum::{routing::get, Router}; use axum::{
routing::{get, post},
Router,
};
use crate::{config::Config, somehow}; use crate::{config::Config, somehow};
@ -46,9 +49,10 @@ pub async fn run(server: Server) -> somehow::Result<()> {
let app = Router::new() let app = Router::new()
.route("/", get(index::get)) .route("/", get(index::get))
.route("/commit/:hash", get(commit::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/", get(queue::get))
.route("/queue/inner", get(queue::get_inner)) .route("/queue/inner", get(queue::get_inner))
.route("/worker/:name", get(worker::get))
.merge(api::router(&server)) .merge(api::router(&server))
.fallback(get(r#static::static_handler)) .fallback(get(r#static::static_handler))
.with_state(server.clone()); .with_state(server.clone());

View file

@ -2,10 +2,11 @@ use askama::Template;
use axum::{ use axum::{
extract::{Path, State}, extract::{Path, State},
http::StatusCode, http::StatusCode,
response::{IntoResponse, Response}, response::{IntoResponse, Redirect, Response},
}; };
use futures::TryStreamExt; use futures::TryStreamExt;
use sqlx::SqlitePool; use sqlx::SqlitePool;
use time::OffsetDateTime;
use crate::{config::Config, server::util, somehow}; use crate::{config::Config, server::util, somehow};
@ -98,3 +99,20 @@ pub async fn get(
} }
.into_response()) .into_response())
} }
pub async fn post_enqueue(
Path(hash): Path<String>,
State(config): State<&'static Config>,
State(db): State<SqlitePool>,
) -> somehow::Result<impl IntoResponse> {
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)))
}

View file

@ -33,4 +33,8 @@
<pre class="{% call util::commit_class(reachable) %}" <pre class="{% call util::commit_class(reachable) %}"
title="{% call util::commit_title(reachable) %}">{{ message }}</pre> title="{% call util::commit_title(reachable) %}">{{ message }}</pre>
</div> </div>
<form method="post" action="{{ base.root }}commit/{{ hash }}/enqueue">
<button>Enqueue</button>
</form>
{% endblock %} {% endblock %}