integrationos_domain/domain/configuration/
database.rs

1use std::fmt::{Display, Formatter};
2
3use envconfig::Envconfig;
4
5#[derive(Envconfig, Clone)] // Intentionally no Debug so secret is not printed
6pub struct DatabaseConfig {
7    #[envconfig(from = "CONTROL_DATABASE_URL", default = "mongodb://localhost:27017")]
8    pub control_db_url: String,
9    #[envconfig(from = "CONTROL_DATABASE_NAME", default = "database")]
10    pub control_db_name: String,
11    #[envconfig(from = "UDM_DATABASE_URL", default = "mongodb://localhost:27017")]
12    pub udm_db_url: String,
13    #[envconfig(from = "UDM_DATABASE_NAME", default = "udm")]
14    pub udm_db_name: String,
15    #[envconfig(from = "EVENT_DATABASE_URL", default = "mongodb://localhost:27017")]
16    pub event_db_url: String,
17    #[envconfig(from = "EVENT_DATABASE_NAME", default = "database")]
18    pub event_db_name: String,
19    #[envconfig(from = "CONTEXT_DATABASE_URL", default = "mongodb://localhost:27017")]
20    pub context_db_url: String,
21    #[envconfig(from = "CONTEXT_DATABASE_NAME", default = "database")]
22    pub context_db_name: String,
23    #[envconfig(from = "CONTEXT_COLLECTION_NAME", default = "event-transactions")]
24    pub context_collection_name: String,
25}
26
27impl DatabaseConfig {
28    pub fn new() -> Self {
29        Self::default()
30    }
31}
32
33impl Default for DatabaseConfig {
34    fn default() -> Self {
35        Self {
36            control_db_url: "mongodb://localhost:27017".to_owned(),
37            control_db_name: "database".to_owned(),
38            udm_db_url: "mongodb://localhost:27017".to_owned(),
39            udm_db_name: "udm".to_owned(),
40            event_db_url: "mongodb://localhost:27017".to_owned(),
41            event_db_name: "database".to_owned(),
42            context_db_url: "mongodb://localhost:27017".to_owned(),
43            context_db_name: "database".to_owned(),
44            context_collection_name: "event-transactions".to_owned(),
45        }
46    }
47}
48
49impl Display for DatabaseConfig {
50    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
51        writeln!(f, "CONTROL_DATABASE_URL: ****")?;
52        writeln!(f, "CONTROL_DATABASE_NAME: {}", self.control_db_name)?;
53        writeln!(f, "UDM_DATABASE_URL: ****")?;
54        writeln!(f, "UDM_DATABASE_NAME: {}", self.udm_db_name)?;
55        writeln!(f, "EVENT_DATABASE_URL: ****")?;
56        writeln!(f, "EVENT_DATABASE_NAME: {}", self.event_db_name)?;
57        writeln!(f, "CONTEXT_DATABASE_URL: ****")?;
58        writeln!(f, "CONTEXT_DATABASE_NAME: {}", self.context_db_name)?;
59        writeln!(
60            f,
61            "CONTEXT_COLLECTION_NAME: {}",
62            self.context_collection_name
63        )
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70
71    #[tokio::test]
72    async fn test_config() {
73        let config = DatabaseConfig::new();
74
75        assert_eq!(
76            config.control_db_url,
77            "mongodb://localhost:27017".to_owned()
78        );
79        assert_eq!(config.control_db_name, "database".to_owned());
80        assert_eq!(config.event_db_url, "mongodb://localhost:27017".to_owned());
81        assert_eq!(config.event_db_name, "database".to_owned());
82        assert_eq!(
83            config.context_db_url,
84            "mongodb://localhost:27017".to_owned()
85        );
86        assert_eq!(config.context_db_name, "database".to_owned());
87        assert_eq!(
88            config.context_collection_name,
89            "event-transactions".to_owned()
90        );
91    }
92
93    #[tokio::test]
94    async fn test_config_display() {
95        let config = DatabaseConfig::new();
96
97        let config_str = format!("{config}");
98
99        let display = "CONTROL_DATABASE_URL: ****\n\
100            CONTROL_DATABASE_NAME: database\n\
101            UDM_DATABASE_URL: ****\n\
102            UDM_DATABASE_NAME: udm\n\
103            EVENT_DATABASE_URL: ****\n\
104            EVENT_DATABASE_NAME: database\n\
105            CONTEXT_DATABASE_URL: ****\n\
106            CONTEXT_DATABASE_NAME: database\n\
107            CONTEXT_COLLECTION_NAME: event-transactions\n\
108        ";
109
110        assert_eq!(config_str, display);
111    }
112}