diff --git a/web/src/routes/admin.rs b/web/src/routes/admin.rs index 8e80d65..c3297dd 100644 --- a/web/src/routes/admin.rs +++ b/web/src/routes/admin.rs @@ -133,6 +133,30 @@ pub async fn bot_data(cookies: &CookieJar<'_>, pool: &State>) -> Jso .await .unwrap(); + let interval_count = sqlx::query!( + "SELECT COUNT(1) AS count + FROM reminders + WHERE + `interval_seconds` IS NOT NULL OR + `interval_months` IS NOT NULL OR + `interval_days` IS NOT NULL" + ) + .fetch_one(pool.inner()) + .await + .unwrap(); + + let reminder_count = sqlx::query!( + "SELECT COUNT(1) AS count + FROM reminders + WHERE + `interval_seconds` IS NULL AND + `interval_months` IS NULL AND + `interval_days` IS NULL" + ) + .fetch_one(pool.inner()) + .await + .unwrap(); + Ok(json!({ "backlog": backlog.backlog, "scheduleShort": { @@ -142,6 +166,10 @@ pub async fn bot_data(cookies: &CookieJar<'_>, pool: &State>) -> Jso "scheduleLong": { "once": schedule_once_long, "interval": schedule_interval_long, + }, + "count": { + "reminders": reminder_count.count, + "intervals": interval_count.count, } })) } diff --git a/web/static/js/admin.js b/web/static/js/admin.js index 18e5bc9..000d23d 100644 --- a/web/static/js/admin.js +++ b/web/static/js/admin.js @@ -3,6 +3,8 @@ document.addEventListener("DOMContentLoaded", () => { .then((resp) => resp.json()) .then((data) => { document.querySelector("#backlog").textContent = data.backlog; + document.querySelector("#reminders").textContent = data.count.reminders; + document.querySelector("#intervals").textContent = data.count.intervals; new Chart(document.getElementById("schedule"), { type: "bar", diff --git a/web/templates/admin_dashboard.html.tera b/web/templates/admin_dashboard.html.tera index e73cd4b..84455b5 100644 --- a/web/templates/admin_dashboard.html.tera +++ b/web/templates/admin_dashboard.html.tera @@ -46,6 +46,14 @@

Backlog

?

+
+

Reminders

+

?

+
+
+

Intervals

+

?

+