docbox_core/background/
mod.rs1use 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 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}