shared/settings/
activity.rs1use super::{
2 ExtensionSettings, SettingsDeserializeExt, SettingsDeserializer, SettingsSerializeExt,
3 SettingsSerializer,
4};
5use compact_str::ToCompactString;
6use serde::{Deserialize, Serialize};
7use utoipa::ToSchema;
8
9#[derive(Clone, ToSchema, Serialize, Deserialize)]
10pub struct AppSettingsActivity {
11 pub admin_log_retention_days: u16,
12 pub admin_log_retention_count: Option<u64>,
13 pub user_log_retention_days: u16,
14 pub user_log_retention_count: Option<u64>,
15 pub server_log_retention_days: u16,
16 pub server_log_retention_count: Option<u64>,
17
18 pub server_log_admin_activity: bool,
19 pub server_log_schedule_activity: bool,
20}
21
22#[async_trait::async_trait]
23impl SettingsSerializeExt for AppSettingsActivity {
24 async fn serialize(
25 &self,
26 serializer: SettingsSerializer,
27 ) -> Result<SettingsSerializer, anyhow::Error> {
28 Ok(serializer
29 .write_raw_setting(
30 "admin_log_retention_days",
31 self.admin_log_retention_days.to_compact_string(),
32 )
33 .write_raw_setting(
34 "admin_log_retention_count",
35 self.admin_log_retention_count
36 .map_or("".into(), |c| c.to_compact_string()),
37 )
38 .write_raw_setting(
39 "user_log_retention_days",
40 self.user_log_retention_days.to_compact_string(),
41 )
42 .write_raw_setting(
43 "user_log_retention_count",
44 self.user_log_retention_count
45 .map_or("".into(), |c| c.to_compact_string()),
46 )
47 .write_raw_setting(
48 "server_log_retention_days",
49 self.server_log_retention_days.to_compact_string(),
50 )
51 .write_raw_setting(
52 "server_log_retention_count",
53 self.server_log_retention_count
54 .map_or("".into(), |c| c.to_compact_string()),
55 )
56 .write_raw_setting(
57 "server_log_admin_activity",
58 self.server_log_admin_activity.to_compact_string(),
59 )
60 .write_raw_setting(
61 "server_log_schedule_activity",
62 self.server_log_schedule_activity.to_compact_string(),
63 ))
64 }
65}
66
67pub struct AppSettingsActivityDeserializer;
68
69#[async_trait::async_trait]
70impl SettingsDeserializeExt for AppSettingsActivityDeserializer {
71 async fn deserialize_boxed(
72 &self,
73 mut deserializer: SettingsDeserializer<'_>,
74 ) -> Result<ExtensionSettings, anyhow::Error> {
75 Ok(Box::new(AppSettingsActivity {
76 admin_log_retention_days: deserializer
77 .take_raw_setting("admin_log_retention_days")
78 .and_then(|s| s.parse().ok())
79 .unwrap_or(180),
80 admin_log_retention_count: deserializer
81 .take_raw_setting("admin_log_retention_count")
82 .and_then(|s| s.parse().ok()),
83 user_log_retention_days: deserializer
84 .take_raw_setting("user_log_retention_days")
85 .and_then(|s| s.parse().ok())
86 .unwrap_or(180),
87 user_log_retention_count: deserializer
88 .take_raw_setting("user_log_retention_count")
89 .and_then(|s| s.parse().ok()),
90 server_log_retention_days: deserializer
91 .take_raw_setting("server_log_retention_days")
92 .and_then(|s| s.parse().ok())
93 .unwrap_or(90),
94 server_log_retention_count: deserializer
95 .take_raw_setting("server_log_retention_count")
96 .and_then(|s| s.parse().ok()),
97 server_log_admin_activity: deserializer
98 .take_raw_setting("server_log_admin_activity")
99 .map(|s| s == "true")
100 .unwrap_or(true),
101 server_log_schedule_activity: deserializer
102 .take_raw_setting("server_log_schedule_activity")
103 .map(|s| s == "true")
104 .unwrap_or(true),
105 }))
106 }
107}