Logging + database migrations system.

This commit is contained in:
Paul Makles
2020-08-11 21:08:01 +02:00
parent 750f8c6738
commit a8eb403280
9 changed files with 157 additions and 12 deletions

View File

@@ -0,0 +1,53 @@
use super::super::get_collection;
use serde::{Serialize, Deserialize};
use mongodb::bson::{Bson, from_bson, doc};
use log::info;
#[derive(Serialize, Deserialize)]
struct MigrationInfo {
_id: i32,
revision: i32
}
pub const LATEST_REVISION: i32 = 1;
pub fn migrate_database() {
let migrations = get_collection("migrations");
let data = migrations.find_one(None, None)
.expect("Failed to fetch migration data.");
if let Some(doc) = data {
let info: MigrationInfo = from_bson(Bson::Document(doc))
.expect("Failed to read migration information.");
let revision = run_migrations(info.revision);
migrations.update_one(
doc! {
"_id": info._id
},
doc! {
"$set": {
"revision": revision
}
},
None
).expect("Failed to commit migration information.");
info!("Migration complete. Currently at revision {}.", revision);
} else {
panic!("Database was configured incorrectly, possibly because initalization failed.")
}
}
pub fn run_migrations(revision: i32) -> i32 {
info!("Starting database migration.");
if revision <= 0 {
info!("Running migration [revision 0]: Test migration system.");
}
// Reminder to update LATEST_REVISION when adding new migrations.
LATEST_REVISION
}