tdm_server_rust/cache/
task_tracking_cache.rs1use crate::{
18 app::AppState,
19 entity::episode::{MemberTaskCount, TaskTrackingResponse},
20};
21use std::sync::Arc;
22use std::time::Duration;
23
24const EPISODE_TASKS_KEY: &str = "episode_tasks";
26const MEMBER_TASK_COUNTS_KEY: &str = "member_task_counts";
28
29pub type EpisodeTasksCache = moka::future::Cache<String, Arc<TaskTrackingResponse>>;
31pub type MemberTaskCountsCache = moka::future::Cache<String, Arc<Vec<MemberTaskCount>>>;
33
34pub fn new_episode_tasks_cache() -> EpisodeTasksCache {
38 let ttl_secs = std::env::var("TASK_TRACKING_CACHE_SECS")
39 .ok()
40 .and_then(|v| v.parse().ok())
41 .unwrap_or(20);
42 moka::future::Cache::builder()
43 .time_to_live(Duration::from_secs(ttl_secs))
44 .build()
45}
46
47pub fn new_member_task_counts_cache() -> MemberTaskCountsCache {
49 let ttl_secs = std::env::var("TASK_TRACKING_CACHE_SECS")
50 .ok()
51 .and_then(|v| v.parse().ok())
52 .unwrap_or(20);
53 moka::future::Cache::builder()
54 .time_to_live(Duration::from_secs(ttl_secs))
55 .build()
56}
57
58pub async fn get_episode_tasks_cached(state: &AppState) -> Option<TaskTrackingResponse> {
65 state
66 .episode_tasks_cache
67 .get(EPISODE_TASKS_KEY)
68 .await
69 .map(|v| (*v).clone())
70}
71
72pub async fn set_episode_tasks_cached(state: &AppState, data: TaskTrackingResponse) {
74 state
75 .episode_tasks_cache
76 .insert(EPISODE_TASKS_KEY.to_string(), Arc::new(data))
77 .await;
78}
79
80pub async fn get_member_task_counts_cached(state: &AppState) -> Option<Vec<MemberTaskCount>> {
82 state
83 .member_task_counts_cache
84 .get(MEMBER_TASK_COUNTS_KEY)
85 .await
86 .map(|v| (*v).clone())
87}
88
89pub async fn set_member_task_counts_cached(state: &AppState, data: Vec<MemberTaskCount>) {
91 state
92 .member_task_counts_cache
93 .insert(MEMBER_TASK_COUNTS_KEY.to_string(), Arc::new(data))
94 .await;
95}
96
97pub async fn invalidate_task_tracking(state: &AppState) {
101 state.episode_tasks_cache.invalidate(EPISODE_TASKS_KEY).await;
102 state
103 .member_task_counts_cache
104 .invalidate(MEMBER_TASK_COUNTS_KEY)
105 .await;
106}