mod chats; mod messages; mod sql; use crate::config::Config; use buckets_core::{Config as BucketsConfig, DataManager as BucketsManager}; use oiseau::{execute, postgres::DataManager as OiseauManager, postgres::Result as PgResult}; use std::collections::HashMap; use tetratto_core::model::{Error, Result}; #[derive(Clone)] pub struct DataManager(pub OiseauManager, pub BucketsManager); impl DataManager { /// Create a new [`DataManager`]. pub async fn new(config: Config) -> PgResult { let buckets_manager = BucketsManager::new(BucketsConfig { directory: config.uploads_dir.clone(), bucket_defaults: HashMap::new(), database: config.database.clone(), }) .await .expect("failed to create buckets manager"); Ok(Self(OiseauManager::new(config).await?, buckets_manager)) } /// Initialize tables. pub async fn init(&self) -> Result<()> { let conn = match self.0.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), }; execute!(&conn, sql::CREATE_TABLE_CHATS).unwrap(); execute!(&conn, sql::CREATE_TABLE_MESSAGES).unwrap(); Ok(()) } }