tawny/src/database/mod.rs
2025-09-09 23:12:49 -04:00

64 lines
1.8 KiB
Rust

mod chat_invites;
mod chats;
mod messages;
mod notifications;
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<Config>,
pub BucketsManager,
pub TetrattoManager,
);
impl DataManager {
/// Create a new [`DataManager`].
pub async fn new(config: Config) -> PgResult<Self> {
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();
execute!(&conn, sql::CREATE_TABLE_CHAT_INVITES).unwrap();
for x in sql::VERSION_MIGRATIONS.split(";") {
execute!(&conn, x).unwrap();
}
Ok(())
}
}