Skip to main content

autter_core/database/
mod.rs

1mod audit_log;
2mod ip_bans;
3mod notifications;
4mod organization_memberships;
5mod organizations;
6mod permissions_lists;
7mod properties;
8mod sql;
9mod user_warnings;
10mod users;
11
12use std::collections::HashMap;
13
14use crate::config::Config;
15use buckets_core::{Config as BucketsConfig, DataManager as BucketsManager};
16use oiseau::{execute, postgres::DataManager as OiseauManager, postgres::Result as PgResult};
17use tetratto_core2::model::{Error, Result};
18
19#[derive(Clone)]
20pub struct DataManager(pub OiseauManager<Config>, pub BucketsManager);
21
22impl DataManager {
23    /// Create a new [`DataManager`].
24    pub async fn new(config: Config) -> PgResult<Self> {
25        let buckets_manager = BucketsManager::new(BucketsConfig {
26            directory: format!("{}/{}", config.dirs.media, "uploads"),
27            bucket_defaults: HashMap::new(),
28            database: config.database.clone(),
29            banned_hosts: vec![config.host.clone()],
30        })
31        .await
32        .expect("failed to create buckets manager");
33
34        Ok(Self(OiseauManager::new(config).await?, buckets_manager))
35    }
36
37    /// Initialize tables.
38    pub async fn init(&self) -> Result<()> {
39        let conn = match self.0.connect().await {
40            Ok(c) => c,
41            Err(e) => return Err(Error::DatabaseConnection(e.to_string())),
42        };
43
44        execute!(&conn, sql::CREATE_TABLE_USERS).unwrap();
45        execute!(&conn, sql::CREATE_TABLE_NOTIFICATIONS).unwrap();
46        execute!(&conn, sql::CREATE_TABLE_AUDIT_LOG).unwrap();
47        execute!(&conn, sql::CREATE_TABLE_IP_BANS).unwrap();
48        execute!(&conn, sql::CREATE_TABLE_USER_WARNINGS).unwrap();
49        execute!(&conn, sql::CREATE_TABLE_PROPERTIES).unwrap();
50        execute!(&conn, sql::CREATE_TABLE_ORGANIZATIONS).unwrap();
51        execute!(&conn, sql::CREATE_TABLE_ORGANIZATION_MEMBERSHIPS).unwrap();
52        execute!(&conn, sql::CREATE_TABLE_PERMISSIONS_LISTS).unwrap();
53        execute!(&conn, sql::ADD_USERS_PRINCIPAL_ORG_FKEY).unwrap();
54
55        for x in sql::VERSION_MIGRATIONS.split(";") {
56            execute!(&conn, x).unwrap();
57        }
58
59        Ok(())
60    }
61}