use async_trait::async_trait;
use crate::error::WalletError;
use crate::monitor::helpers::now_msecs;
use crate::monitor::task_trait::WalletMonitorTask;
use crate::monitor::ONE_HOUR;
use crate::storage::find_args::PurgeParams;
use crate::storage::manager::WalletStorageManager;
pub struct TaskPurge {
storage: WalletStorageManager,
params: PurgeParams,
trigger_msecs: u64,
last_run_msecs: u64,
pub check_now: bool,
}
impl TaskPurge {
pub fn new(storage: WalletStorageManager, params: PurgeParams) -> Self {
Self {
storage,
params,
trigger_msecs: 6 * ONE_HOUR,
last_run_msecs: 0,
check_now: false,
}
}
pub fn with_trigger_msecs(mut self, msecs: u64) -> Self {
self.trigger_msecs = msecs;
self
}
}
#[async_trait]
impl WalletMonitorTask for TaskPurge {
fn name(&self) -> &str {
"Purge"
}
fn trigger(&mut self, now_msecs: u64) -> bool {
self.check_now
|| (self.trigger_msecs > 0 && now_msecs > self.last_run_msecs + self.trigger_msecs)
}
async fn run_task(&mut self) -> Result<String, WalletError> {
self.last_run_msecs = now_msecs();
self.check_now = false;
use crate::storage::traits::reader_writer::StorageReaderWriter;
let result = self.storage.purge_data(&self.params).await?;
Ok(result)
}
}
#[cfg(test)]
mod tests {
use crate::monitor::ONE_HOUR;
#[test]
fn test_purge_trigger_timing() {
assert_eq!(6 * ONE_HOUR, 21_600_000); }
#[test]
fn test_purge_name() {
assert_eq!("Purge", "Purge");
}
}