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