bsv_wallet_toolbox/monitor/tasks/
task_purge.rs1use async_trait::async_trait;
9
10use crate::error::WalletError;
11use crate::monitor::helpers::now_msecs;
12use crate::monitor::task_trait::WalletMonitorTask;
13use crate::monitor::ONE_HOUR;
14use crate::storage::find_args::PurgeParams;
15use crate::storage::manager::WalletStorageManager;
16
17pub struct TaskPurge {
19 storage: WalletStorageManager,
20 params: PurgeParams,
21 trigger_msecs: u64,
22 last_run_msecs: u64,
23 pub check_now: bool,
25}
26
27impl TaskPurge {
28 pub fn new(storage: WalletStorageManager, params: PurgeParams) -> Self {
30 Self {
31 storage,
32 params,
33 trigger_msecs: 6 * ONE_HOUR,
34 last_run_msecs: 0,
35 check_now: false,
36 }
37 }
38
39 pub fn with_trigger_msecs(mut self, msecs: u64) -> Self {
41 self.trigger_msecs = msecs;
42 self
43 }
44}
45
46#[async_trait]
47impl WalletMonitorTask for TaskPurge {
48 fn name(&self) -> &str {
49 "Purge"
50 }
51
52 fn trigger(&mut self, now_msecs: u64) -> bool {
53 self.check_now
54 || (self.trigger_msecs > 0 && now_msecs > self.last_run_msecs + self.trigger_msecs)
55 }
56
57 async fn run_task(&mut self) -> Result<String, WalletError> {
58 self.last_run_msecs = now_msecs();
59 self.check_now = false;
60
61 use crate::storage::traits::reader_writer::StorageReaderWriter;
62 let result = self.storage.purge_data(&self.params).await?;
63 Ok(result)
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use crate::monitor::ONE_HOUR;
70
71 #[test]
72 fn test_purge_trigger_timing() {
73 assert_eq!(6 * ONE_HOUR, 21_600_000); }
77
78 #[test]
79 fn test_purge_name() {
80 assert_eq!("Purge", "Purge");
81 }
82}