/
codemaster
/
a-pass-oauth
Обзор
Документация
Войти
/
codemaster
/
a-pass-oauth
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/db.rs
58 строк
2 KB
mich-master
Db Users
19 дек 2025, 16:07
19 дек 2025, 16:07
29f9807
Код
Авторство
О чём код?
use deadpool::managed::QueueMode; use deadpool_postgres::{Config, ManagerConfig, RecyclingMethod, Runtime, Pool}; use tokio_postgres::NoTls; use crate::config::DatabaseConfig; mod clients; mod error; mod users; use clients::ClientRepository; use users::UserRepository; pub struct Db { pub clients: ClientRepository, pub users: UserRepository, } impl Db { pub async fn new(db_config: &DatabaseConfig) -> Self { let pool = Self::create_pool(db_config).await.unwrap(); Self { clients: ClientRepository::new(pool.clone()), users: UserRepository::new(pool.clone()), } } async fn create_pool(settings: &DatabaseConfig) -> Result<Pool, Box<dyn std::error::Error>> { let mut cfg = Config::new(); // Настройка из конфигурации cfg.host = Some(settings.host.clone()); cfg.port = Some(settings.port); cfg.dbname = Some(settings.database.clone()); cfg.user = Some(settings.user.clone()); cfg.password = Some(settings.password.clone()); // Настройка пула cfg.pool = Some(deadpool_postgres::PoolConfig { max_size: settings.max_connections, timeouts: deadpool_postgres::Timeouts::default(), queue_mode: QueueMode::Fifo, }); // Настройка менеджера соединений cfg.manager = Some(ManagerConfig { recycling_method: RecyclingMethod::Fast, }); // Создаем пул let pool = cfg.create_pool(Some(Runtime::Tokio1), NoTls)?; // Проверяем соединение let client = pool.get().await?; let _ = client.query_one("SELECT 1", &[]).await?; Ok(pool) } }