From 58afd1f2582fa2b62357d345437199d3c17e150d Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Thu, 17 Mar 2022 19:41:41 +0100 Subject: [PATCH] =?UTF-8?q?Corrige=20ejecuci=C3=B3n=20de=20las=20migracion?= =?UTF-8?q?es=20en=20m=C3=B3dulos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pagetop/src/base/module/user/migration/mod.rs | 11 ---------- pagetop/src/base/module/user/mod.rs | 8 ++++--- pagetop/src/config.rs | 10 ++++----- pagetop/src/core/all.rs | 22 ++++++++++++++----- pagetop/src/core/module/definition.rs | 4 ++-- pagetop/src/core/server/app.rs | 2 +- pagetop/src/db.rs | 10 +++------ pagetop/src/prelude.rs | 2 +- pagetop/src/util.rs | 4 ++-- 9 files changed, 35 insertions(+), 38 deletions(-) diff --git a/pagetop/src/base/module/user/migration/mod.rs b/pagetop/src/base/module/user/migration/mod.rs index 8b9167a6..60836980 100644 --- a/pagetop/src/base/module/user/migration/mod.rs +++ b/pagetop/src/base/module/user/migration/mod.rs @@ -1,12 +1 @@ -use crate::db::migration::*; - pub mod m20220312_000001_create_table_user; - -pub struct Migrator; - -#[async_trait::async_trait] -impl MigratorTrait for Migrator { - fn migrations() -> Vec> { - vec![Box::new(m20220312_000001_create_table_user::Migration)] - } -} diff --git a/pagetop/src/base/module/user/mod.rs b/pagetop/src/base/module/user/mod.rs index 99096377..362961eb 100644 --- a/pagetop/src/base/module/user/mod.rs +++ b/pagetop/src/base/module/user/mod.rs @@ -1,6 +1,6 @@ use crate::prelude::*; -localize!("en-US", "src/base/module/user/locales"); +localize!("src/base/module/user/locales"); mod entity; mod migration; @@ -24,8 +24,10 @@ impl ModuleTrait for UserModule { cfg.route("/user/login", server::web::get().to(login)); } - fn migrations(&self, dbconn: &db::DbConn) -> Result<(), db::DbErr> { - db_migrations!(dbconn) + fn migrations(&self) -> Vec> { + vec![ + boxed_migration!(m20220312_000001_create_table_user) + ] } } diff --git a/pagetop/src/config.rs b/pagetop/src/config.rs index fedffc21..27dbb275 100644 --- a/pagetop/src/config.rs +++ b/pagetop/src/config.rs @@ -45,15 +45,15 @@ pub static CONFIG: Lazy = Lazy::new(|| { /// seguros. Produce un *panic!* en caso de asignaciones no vĂ¡lidas. macro_rules! config_map { ( - $COMM:expr, - $CONF:ident, - $TYPE:tt + $doc:expr, + $SETTINGS:ident, + $Type:tt $(, $key:expr => $value:expr)* ) => { $crate::doc_comment! { - concat!($COMM), + concat!($doc), - pub static $CONF: $crate::Lazy<$TYPE> = $crate::Lazy::new(|| { + pub static $SETTINGS: $crate::Lazy<$Type> = $crate::Lazy::new(|| { let mut settings = $crate::config::CONFIG.clone(); $( settings.set_default($key, $value).unwrap(); diff --git a/pagetop/src/core/all.rs b/pagetop/src/core/all.rs index b48e0684..20df22bd 100644 --- a/pagetop/src/core/all.rs +++ b/pagetop/src/core/all.rs @@ -1,4 +1,5 @@ -use crate::{Lazy, trace}; +use crate::{Lazy, run_now}; +use crate::db::migration::*; use crate::core::theme::ThemeTrait; use crate::core::module::ModuleTrait; use crate::core::server; @@ -41,9 +42,18 @@ pub fn modules(cfg: &mut server::web::ServiceConfig) { } #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] -pub fn migrations() { - trace::info!("Checking migrations"); - for m in MODULES.read().unwrap().iter() { - m.migrations(&*server::db::DBCONN).expect("Failed to run migrations"); - } +pub fn run_migrations() { + run_now({ + struct Migrator; + impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + let mut migrations = vec![]; + for m in MODULES.read().unwrap().iter() { + migrations.append(&mut m.migrations()); + } + migrations + } + } + Migrator::up(&server::db::DBCONN, None) + }).unwrap(); } diff --git a/pagetop/src/core/module/definition.rs b/pagetop/src/core/module/definition.rs index 011ef083..c50cace3 100644 --- a/pagetop/src/core/module/definition.rs +++ b/pagetop/src/core/module/definition.rs @@ -19,7 +19,7 @@ pub trait ModuleTrait: Send + Sync { #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] #[allow(unused_variables)] - fn migrations(&self, dbconn: &db::DbConn) -> Result<(), db::DbErr> { - Ok(()) + fn migrations(&self) -> Vec> { + vec![] } } diff --git a/pagetop/src/core/server/app.rs b/pagetop/src/core/server/app.rs index cbca9979..74e1690d 100644 --- a/pagetop/src/core/server/app.rs +++ b/pagetop/src/core/server/app.rs @@ -74,7 +74,7 @@ impl Application { // Comprueba actualizaciones pendientes de la base de datos (opcional). #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] - all::migrations(); + all::run_migrations(); // Prepara el servidor web. let server = server::HttpServer::new(move || { diff --git a/pagetop/src/db.rs b/pagetop/src/db.rs index b487cc19..d68a5aac 100644 --- a/pagetop/src/db.rs +++ b/pagetop/src/db.rs @@ -14,12 +14,8 @@ pub mod migration { } #[macro_export] -macro_rules! db_migrations { - ( $DBCONN:ident ) => {{ - $crate::run_now({ - use $crate::db::migration::MigratorTrait; - - migration::Migrator::up($DBCONN, None) - }) +macro_rules! boxed_migration { + ( $migration_module:ident ) => {{ + Box::new(migration::$migration_module::Migration) }}; } diff --git a/pagetop/src/prelude.rs b/pagetop/src/prelude.rs index 1dd8bd79..18d160ce 100644 --- a/pagetop/src/prelude.rs +++ b/pagetop/src/prelude.rs @@ -6,7 +6,7 @@ pub use crate::trace; pub use crate::localize; #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] -pub use crate::{db, db_migrations}; +pub use crate::{db, boxed_migration}; pub use crate::core::html::*; pub use crate::core::theme::*; diff --git a/pagetop/src/util.rs b/pagetop/src/util.rs index c56d2146..3fff0a23 100644 --- a/pagetop/src/util.rs +++ b/pagetop/src/util.rs @@ -9,10 +9,10 @@ /// ]; /// ``` macro_rules! args { - ( $($KEY:expr => $VALUE:expr),* ) => {{ + ( $($key:expr => $value:expr),* ) => {{ let mut a = std::collections::HashMap::new(); $( - a.insert(String::from($KEY), $VALUE.into()); + a.insert(String::from($key), $value.into()); )* a }};