2021-12-08 03:33:25 +00:00
|
|
|
use crate::database::Database;
|
|
|
|
use crate::migration::Migration;
|
|
|
|
use geoffrey_models::models::locations::LocationDb;
|
|
|
|
use geoffrey_models::GeoffreyDatabaseModel;
|
|
|
|
|
|
|
|
pub(crate) struct TunnelToPortalMigration {}
|
|
|
|
|
|
|
|
impl Migration for TunnelToPortalMigration {
|
|
|
|
fn up(db: &Database) -> crate::error::Result<()> {
|
|
|
|
let loc_tree = db.db.open_tree(LocationDb::tree())?;
|
|
|
|
|
|
|
|
for entry in loc_tree.iter() {
|
|
|
|
let (id, loc_ivec) = entry?;
|
|
|
|
let mut loc = json::parse(std::str::from_utf8(&loc_ivec).unwrap()).unwrap();
|
|
|
|
|
|
|
|
let tunnel = loc["tunnel"].clone();
|
|
|
|
|
|
|
|
loc["portal"] = tunnel;
|
|
|
|
|
|
|
|
loc_tree.insert(id, loc.to_string().as_bytes())?;
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn down(db: &Database) -> crate::error::Result<()> {
|
|
|
|
let loc_tree = db.db.open_tree(LocationDb::tree())?;
|
|
|
|
|
|
|
|
for entry in loc_tree.iter() {
|
|
|
|
let (id, loc_ivec) = entry?;
|
|
|
|
let mut loc = json::parse(std::str::from_utf8(&loc_ivec).unwrap()).unwrap();
|
|
|
|
|
|
|
|
let portal = loc["portal"].clone();
|
|
|
|
|
|
|
|
loc["tunnel"] = portal;
|
|
|
|
|
|
|
|
loc_tree.insert(id, loc.to_string().as_bytes())?;
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn version() -> u64 {
|
|
|
|
2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use crate::database::Database;
|
|
|
|
use crate::migration::migration_3::TunnelToPortalMigration;
|
|
|
|
use crate::migration::Migration;
|
|
|
|
use geoffrey_models::models::locations::LocationDb;
|
|
|
|
use geoffrey_models::GeoffreyDatabaseModel;
|
|
|
|
use sled::IVec;
|
|
|
|
use std::path::Path;
|
|
|
|
|
|
|
|
#[test]
|
2021-12-27 01:16:31 +00:00
|
|
|
fn test_migration_3() {
|
2021-12-08 03:33:25 +00:00
|
|
|
let db = Database::new(Path::new("../migration_3_db/")).unwrap();
|
|
|
|
|
|
|
|
let loc_tree = db.db.open_tree(LocationDb::tree()).unwrap();
|
|
|
|
|
|
|
|
let old_loc = json::parse(
|
|
|
|
r#"{
|
|
|
|
"id": 55,
|
|
|
|
"name": "Test",
|
|
|
|
"position": {
|
|
|
|
"x": 55,
|
|
|
|
"y": 55,
|
|
|
|
"z": 55,
|
|
|
|
"dimension": "Overworld"
|
|
|
|
},
|
|
|
|
"tunnel": {
|
|
|
|
"x": 8,
|
|
|
|
"z": 8
|
|
|
|
},
|
|
|
|
"loc_data": "Base"
|
|
|
|
}"#,
|
|
|
|
)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
loc_tree
|
|
|
|
.insert(IVec::from(vec![55]), old_loc.to_string().as_bytes())
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
TunnelToPortalMigration::up(&db).unwrap();
|
|
|
|
|
|
|
|
let new_loc = loc_tree.get(IVec::from(vec![55])).unwrap().unwrap();
|
|
|
|
let new_loc = json::parse(std::str::from_utf8(&new_loc).unwrap()).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(new_loc["portal"]["x"], 8);
|
|
|
|
assert_eq!(new_loc["portal"]["z"], 8);
|
|
|
|
|
|
|
|
drop(db);
|
|
|
|
|
|
|
|
std::fs::remove_dir_all("../migration_3_db").unwrap();
|
|
|
|
}
|
|
|
|
}
|