From 0768a2efa68b72107f2f2e7fa0f0dc87fd12d3c4 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 9 Jul 2026 16:20:43 +0200 Subject: fix cron double fire Signed-off-by: salmonik --- src/database/mod.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/database') diff --git a/src/database/mod.rs b/src/database/mod.rs index 53f4bf4..e803da9 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -50,12 +50,19 @@ async fn run_migrations(pool: &DbPool) -> Result<()> { active INTEGER NOT NULL DEFAULT 1, audio_filename TEXT, message TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + last_run TIMESTAMP )", ) .execute(pool) .await?; + // Add last_run column for pre-existing databases that lack it. + sqlx::query("ALTER TABLE cron_jobs ADD COLUMN last_run TIMESTAMP") + .execute(pool) + .await + .ok(); + sqlx::query( "CREATE TABLE IF NOT EXISTS triggers ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -157,6 +164,7 @@ pub struct CronJob { pub message: Option, #[allow(dead_code)] pub created_at: Option>, + pub last_run: Option>, } #[allow(dead_code)] @@ -202,6 +210,15 @@ pub async fn delete_cron_job(pool: &DbPool, id: i64) -> Result { Ok(result.rows_affected() > 0) } +pub async fn update_cron_last_run(pool: &DbPool, id: i64, last_run: DateTime) -> Result<()> { + sqlx::query("UPDATE cron_jobs SET last_run = ? WHERE id = ?") + .bind(last_run) + .bind(id) + .execute(pool) + .await?; + Ok(()) +} + pub async fn set_cron_job_active(pool: &DbPool, id: i64, active: bool) -> Result { let result = sqlx::query("UPDATE cron_jobs SET active = ? WHERE id = ?") .bind(if active { 1 } else { 0 }) -- cgit v1.2.3