use tokio_rusqlite::{named_params, Connection}; use crate::model::job::Job; pub async fn should_run(conn: &Connection, job: Job) -> bool { let run_from = match job { Job::WeeklyReport => "date('now', 'weekday 0', '-6 days')", Job::MonthlyPayment => "date('now', 'start of month')", }; let query = format!( r#"SELECT 1 FROM jobs WHERE name = ? AND last_execution < {}"#, run_from ); let res = conn .call(move |conn| { let mut stmt = conn.prepare(&query)?; Ok(stmt.exists([job.to_string()])?) }) .await; match res { Ok(r) => r, Err(err) => { log::error!("Error looking if job should run: {:?}", err); false } } } pub async fn actualize_last_execution(conn: &Connection, job: Job) { let query = r#" UPDATE jobs SET last_execution = datetime() WHERE name = :name "#; let res = conn .call(move |conn| { Ok(conn.execute(query, named_params![":name": job.to_string()])?) }) .await; match res { Ok(_) => (), Err(err) => { log::error!("Error actualizing job last execution: {:?}", err) } } }