From 0aba8b543f0b2f2fd4f8170c92c7cf0e8eb3b118 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Sat, 24 Dec 2022 20:29:44 +0100 Subject: [PATCH] Run pending migrations --- Cargo.toml | 1 + src/db.rs | 15 +++++++++++++-- src/main.rs | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index dff25df..1f1ff36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ axum-extra = { version = "0.4", features = ["spa"] } bytes = "1.3" chrono = { version = "0.4", default-features = false, features = ["clock"] } diesel = { version = "2.0", features = ["r2d2", "sqlite", "returning_clauses_for_sqlite_3_35", "without-deprecated"] } +diesel_migrations = { version = "2.0.0", features = ["sqlite"] } hex = "0.4" hmac = "0.12" lettre = { version = "0.10", default-features = false, features = ["smtp-transport", "hostname", "rustls-tls", "pool", "builder"] } diff --git a/src/db.rs b/src/db.rs index 6c32bae..7c694ac 100644 --- a/src/db.rs +++ b/src/db.rs @@ -1,9 +1,11 @@ -use anyhow::{Context, Result}; +use anyhow::{anyhow, Context, Result}; use chrono::offset::Local; use diesel::{ prelude::*, r2d2::{ConnectionManager, Pool, PooledConnection}, + sqlite::Sqlite, }; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use std::env; use tracing::error; @@ -13,10 +15,19 @@ use crate::{ schema::hooklog, }; +pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); + type DBConnectionManager = ConnectionManager; pub type DBPool = Pool; type DBConnection = PooledConnection; +pub fn run_migrations(connection: &mut impl MigrationHarness) -> Result<()> { + match connection.run_pending_migrations(MIGRATIONS) { + Err(e) => Err(anyhow!("{e:?}")), + Ok(_) => Ok(()), + } +} + pub fn establish_connection_pool() -> Result { let database_url_var = "DATABASE_URL"; let database_url = env::var(database_url_var) @@ -29,7 +40,7 @@ pub fn establish_connection_pool() -> Result { .context("Could not build database connection pool!") } -fn get_conn(pool: &DBPool) -> Result { +pub fn get_conn(pool: &DBPool) -> Result { pool.get().context("Could not get database pool!") } diff --git a/src/main.rs b/src/main.rs index dd19f3a..908256b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,6 +37,8 @@ async fn init() -> Result<()> { let app_state = states::AppState::new(config, mailer)?; + db::run_migrations(&mut db::get_conn(&app_state.db.pool)?)?; + let api_routes = Router::new().route("/trigger", post(routes::trigger)); let routes = Router::new() .route("/", get(routes::index))