diff options
Diffstat (limited to 'src/db/migration/mod.rs')
-rw-r--r-- | src/db/migration/mod.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/db/migration/mod.rs b/src/db/migration/mod.rs index d53f46b..d511f88 100644 --- a/src/db/migration/mod.rs +++ b/src/db/migration/mod.rs @@ -1,5 +1,13 @@ pub use tosin_macros::gather_migrations as gather; +use diesel::{Connection, result::Error as DieselError}; + +use crate::db::backend::Connectable; + +mod change; + +pub use change::*; + pub struct Migration { pub id: usize, pub name: &'static str, @@ -7,6 +15,15 @@ pub struct Migration { pub changes: &'static [DatabaseChange], } -pub enum DatabaseChange { - CreateModel, +impl Migration { + pub fn apply<C: Connectable>(&self, app_name: &str, connection: &C::Connection) { + // TODO prevent double-applying + connection.transaction::<_, DieselError, _>(|| { + for change in self.changes { + change.apply::<C>(app_name, connection); + } + + Ok(()) + }).unwrap(); + } } |