Add database setup

This commit is contained in:
2026-06-23 21:55:50 -04:00
parent 91c79d124a
commit 655afa77ac
2 changed files with 41 additions and 0 deletions

40
src/server/database.rs Normal file
View File

@@ -0,0 +1,40 @@
use diesel_async::{
AsyncMigrationHarness, AsyncPgConnection,
pooled_connection::{AsyncDieselConnectionManager, deadpool::Pool},
};
use diesel_migrations::{EmbeddedMigrations, MigrationHarness, embed_migrations};
use crate::util::error::{Contextualize, Error, ErrorType};
pub const DB_MIGRATIONS: EmbeddedMigrations = embed_migrations!();
pub type DbPool = Pool<AsyncPgConnection>;
/// Connect to the database using the given URI, and perform migrations
pub async fn setup<S: Into<String>>(database_uri: S) -> Result<DbPool, Error> {
let pool_manager = AsyncDieselConnectionManager::<AsyncPgConnection>::new(database_uri);
let pool = Pool::builder(pool_manager)
.build()
// At time of writing only the `NoRuntimeSpecified` error is possible from the builder,
// which should only occur when configuring timeouts without a `Runtime`
.map_err(|e| ErrorType::Database(e.to_string()))
.err_context("Error creating pool for database connections")?;
tracing::debug!("Establishing connection to database for migrations...");
let migration_conn = pool
.get()
.await
.map_err(|e| ErrorType::Database(e.to_string()))
.err_context("Failed to get connection to database")?;
tracing::debug!("Running migrations...");
AsyncMigrationHarness::new(migration_conn)
.run_pending_migrations(DB_MIGRATIONS)
.map_err(|e| ErrorType::Database(e.to_string()))
.err_context("Failed to run pending database migrations")?;
Ok(pool)
}

View File

@@ -1,4 +1,5 @@
pub mod config;
pub mod database;
pub mod main;
pub use main::main;