2021-12-05 23:51:13 +00:00
|
|
|
use crate::database::Database;
|
|
|
|
use crate::error::Result;
|
|
|
|
use crate::migration::migration_2::PosAndNetherMigration;
|
2021-12-08 03:33:25 +00:00
|
|
|
use crate::migration::migration_3::TunnelToPortalMigration;
|
2021-12-27 01:16:31 +00:00
|
|
|
use crate::migration::migration_4::OutOfStockVoting;
|
2021-12-05 23:51:13 +00:00
|
|
|
use geoffrey_models::models::db_metadata::DBMetadata;
|
|
|
|
|
|
|
|
mod migration_2;
|
2021-12-08 03:33:25 +00:00
|
|
|
mod migration_3;
|
2021-12-27 01:16:31 +00:00
|
|
|
mod migration_4;
|
2021-12-05 23:51:13 +00:00
|
|
|
|
|
|
|
trait Migration {
|
|
|
|
fn up(db: &Database) -> Result<()>;
|
|
|
|
fn down(db: &Database) -> Result<()>;
|
|
|
|
fn version() -> u64;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn upgrade(db: &Database, current_version: u64, target_version: u64) -> Result<()> {
|
2021-12-08 03:33:25 +00:00
|
|
|
for ver in current_version + 1..=target_version {
|
2021-12-05 23:51:13 +00:00
|
|
|
match ver {
|
|
|
|
2 => PosAndNetherMigration::up(db)?,
|
2021-12-08 03:33:25 +00:00
|
|
|
3 => TunnelToPortalMigration::up(db)?,
|
2021-12-27 01:16:31 +00:00
|
|
|
4 => OutOfStockVoting::up(db)?,
|
2021-12-08 03:33:25 +00:00
|
|
|
_ => (),
|
2021-12-05 23:51:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn downgrade(db: &Database, current_version: u64, target_version: u64) -> Result<()> {
|
|
|
|
for ver in (target_version..current_version).rev() {
|
|
|
|
match ver {
|
2021-12-08 03:33:25 +00:00
|
|
|
2 => PosAndNetherMigration::down(db)?,
|
|
|
|
3 => TunnelToPortalMigration::down(db)?,
|
2021-12-27 01:16:31 +00:00
|
|
|
4 => OutOfStockVoting::down(db)?,
|
2021-12-08 03:33:25 +00:00
|
|
|
_ => (),
|
2021-12-05 23:51:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn do_migration(db: &Database, target_version: u64) -> Result<()> {
|
|
|
|
let current_version = db.version().unwrap_or(0);
|
|
|
|
|
2021-12-08 03:33:25 +00:00
|
|
|
#[allow(clippy::comparison_chain)]
|
2021-12-05 23:51:13 +00:00
|
|
|
if target_version > current_version {
|
|
|
|
upgrade(db, current_version, target_version)?;
|
2021-12-08 03:33:25 +00:00
|
|
|
} else if target_version < current_version {
|
|
|
|
downgrade(db, current_version, target_version)?;
|
2021-12-05 23:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
let metadata = DBMetadata {
|
|
|
|
version: target_version,
|
|
|
|
};
|
|
|
|
|
|
|
|
db.insert(metadata)?;
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|