Skip to main content

shared/settings/
activity.rs

1use 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}