mod chats; mod messages; mod sql; mod users; 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::{ DataManager as TetrattoManager, config::Config as TetrattoConfig, model::{Error, Result}, }; #[derive(Clone)] pub struct DataManager( pub OiseauManager, pub BucketsManager, pub TetrattoManager, ); 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"); let tetratto_manager = TetrattoManager::new(TetrattoConfig::get_config()) .await .expect("failed to create tetratto manager"); Ok(Self( OiseauManager::new(config).await?, buckets_manager, tetratto_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(); for x in sql::VERSION_MIGRATIONS.split(";") { execute!(&conn, x).unwrap(); } Ok(()) } }