docbox_core/background/
mod.rs

1use crate::{
2    files::purge_expired_presigned_tasks::safe_purge_expired_presigned_tasks,
3    secrets::AppSecretManager, storage::StorageLayerFactory,
4};
5use docbox_database::DatabasePoolCache;
6use futures::StreamExt;
7use scheduler::{SchedulerEventStream, SchedulerQueueEvent};
8use std::sync::Arc;
9
10pub mod scheduler;
11
12#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
13pub enum BackgroundEvent {
14    /// Task to purge presigned URLs
15    PurgeExpiredPresigned,
16}
17
18pub struct BackgroundTaskData {
19    pub db_cache: Arc<DatabasePoolCache<AppSecretManager>>,
20    pub storage: StorageLayerFactory,
21}
22
23pub async fn perform_background_tasks(data: BackgroundTaskData) {
24    let events = vec![SchedulerQueueEvent {
25        event: BackgroundEvent::PurgeExpiredPresigned,
26        interval: 60 * 60,
27    }];
28
29    let mut events = SchedulerEventStream::new(events);
30
31    while let Some(event) = events.next().await {
32        match event {
33            BackgroundEvent::PurgeExpiredPresigned => {
34                tracing::debug!("performing background purge for presigned tasks");
35                tokio::spawn(safe_purge_expired_presigned_tasks(
36                    data.db_cache.clone(),
37                    data.storage.clone(),
38                ));
39            }
40        }
41    }
42}