Files
cupcontrol/src/jobs.rs
2025-12-25 23:57:47 +01:00

56 lines
1.7 KiB
Rust

use std::{error::Error, time::Duration};
use quartz::{Job, Scheduler, Trigger};
use sqlx::query;
use tokio::runtime::Handle;
use crate::{auth, db};
pub fn init_scheduler(rt: Handle) -> Scheduler {
let scheduler = Scheduler::new();
let trigger_every_5min = Trigger::with_identity("5min_trigger", "default_group")
.every(Duration::from_mins(5))
.repeat(u32::max_value());
let trigger_every_3min = Trigger::with_identity("3min_trigger", "default_group")
.every(Duration::from_mins(3))
.repeat(u32::max_value());
let rt_cleanup = rt.clone();
let cleanup_tokens_job = Job::with_identity("cleanup_tokens_job", "default_group", move || {
let rt = rt_cleanup.clone();
rt.spawn(async move {
let _ = cleanup_old_tokens().await;
});
});
let rt_refresh = rt.clone();
let refresh_access_token_job =
Job::with_identity("refresh_access_token_job", "default_group", move || {
let rt = rt_refresh.clone();
rt.spawn(async move {
let _ = refresh_access_token().await;
});
});
scheduler.schedule_job(cleanup_tokens_job, trigger_every_5min);
scheduler.schedule_job(refresh_access_token_job, trigger_every_3min);
scheduler
}
pub async fn cleanup_old_tokens() -> Result<(), Box<dyn Error>> {
let pool = db::get_pool().await?;
let now = chrono::Utc::now();
let now = now.to_rfc3339();
query!("DELETE FROM tokens WHERE expires_at < ?", now)
.execute(&pool)
.await?;
Ok(())
}
pub async fn refresh_access_token() -> Result<(), Box<dyn Error>> {
auth::create_new_access_token().await?;
Ok(())
}