Explorar o código

feat(auth): automatically apply database migrations

Bryan Lee hai 1 ano
pai
achega
d4555335eb

+ 36 - 0
authentication/Cargo.lock

@@ -351,6 +351,7 @@ dependencies = [
  "diesel",
  "diesel-async",
  "diesel-derive-enum",
+ "diesel_async_migrations",
  "dotenvy",
  "env_logger",
  "is_empty",
@@ -634,6 +635,29 @@ dependencies = [
  "syn 2.0.48",
 ]
 
+[[package]]
+name = "diesel_async_migrations"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a700d6b83a17973b94d3065970fd2b36f1036c3fe08adcbdce1c9beb8fb25553"
+dependencies = [
+ "diesel",
+ "diesel-async",
+ "diesel_async_migrations_macros",
+ "scoped-futures",
+ "tracing",
+]
+
+[[package]]
+name = "diesel_async_migrations_macros"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05de210f31e6ac18162501b03c37f839af9f9fd6dd6de2bb4031ae6691c47679"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
 [[package]]
 name = "diesel_derives"
 version = "2.1.2"
@@ -2007,9 +2031,21 @@ checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
 dependencies = [
  "log",
  "pin-project-lite",
+ "tracing-attributes",
  "tracing-core",
 ]
 
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
 [[package]]
 name = "tracing-core"
 version = "0.1.32"

+ 1 - 0
authentication/Cargo.toml

@@ -14,6 +14,7 @@ chrono = { version = "0.4.33", features = ["serde"] }
 diesel = { version = "2.1.4", features = ["chrono", "uuid"] }
 diesel-async = { version = "0.4.1", features = ["postgres", "bb8"] }
 diesel-derive-enum = { version = "2.1.0", features = ["postgres"] }
+diesel_async_migrations = "0.12.0"
 dotenvy = "0.15.7"
 env_logger = "0.11.1"
 is_empty = "0.2.0"

+ 13 - 0
authentication/src/db.rs

@@ -38,3 +38,16 @@ where
         Ok(())
     }
 }
+
+use crate::config::get_db_url;
+use diesel_async_migrations::{embed_migrations, EmbeddedMigrations};
+
+pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!();
+
+pub async fn run_pending_migrations(
+) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
+    let db_url = get_db_url();
+    let mut conn = AsyncPgConnection::establish(&db_url).await?;
+    MIGRATIONS.run_pending_migrations(&mut conn).await?;
+    Ok(())
+}

+ 4 - 0
authentication/src/main.rs

@@ -15,6 +15,10 @@ async fn main() -> std::io::Result<()> {
     std::env::set_var("RUST_LOG", "actix_web=debug,actix_server=info");
     env_logger::init();
 
+    db::run_pending_migrations()
+        .await
+        .expect("Failed to apply database migrations");
+
     let db_pool = db::initialize_db_pool(&config::get_db_url()).await;
     let identity_config = config::get_identity_config();