docbox_core/background/
mod.rs

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