Reset migrations; [point of no return for old databases]

This commit is contained in:
Paul Makles
2021-01-26 09:30:29 +00:00
parent 75a35831da
commit abd8b1821d
2 changed files with 38 additions and 119 deletions

View File

@@ -12,7 +12,7 @@ struct MigrationInfo {
revision: i32,
}
pub const LATEST_REVISION: i32 = 4;
pub const LATEST_REVISION: i32 = 0;
pub async fn migrate_database() {
let migrations = get_collection("migrations");
@@ -55,116 +55,6 @@ pub async fn run_migrations(revision: i32) -> i32 {
info!("Running migration [revision 0]: Test migration system.");
}
if revision <= 1 {
info!("Running migration [revision 1]: Add channels to guild object.");
let col = get_collection("guilds");
let mut guilds = col
.find(
None,
FindOptions::builder().projection(doc! { "_id": 1 }).build(),
)
.await
.expect("Failed to fetch guilds.");
let mut result = get_collection("channels")
.find(
doc! {
"type": 2
},
FindOptions::builder()
.projection(doc! { "_id": 1, "guild": 1 })
.build(),
)
.await
.expect("Failed to fetch channels.");
let mut channels = vec![];
while let Some(doc) = result.next().await {
let channel = doc.expect("Failed to fetch channel.");
let id = channel
.get_str("_id")
.expect("Failed to get channel id.")
.to_string();
let gid = channel
.get_str("guild")
.expect("Failed to get guild id.")
.to_string();
channels.push((id, gid));
}
while let Some(doc) = guilds.next().await {
let guild = doc.expect("Failed to fetch guild.");
let id = guild.get_str("_id").expect("Failed to get guild id.");
let list: Vec<String> = channels
.iter()
.filter(|x| x.1 == id)
.map(|x| x.0.clone())
.collect();
col.update_one(
doc! {
"_id": id
},
doc! {
"$set": {
"channels": list
}
},
None,
)
.await
.expect("Failed to update guild.");
}
}
if revision <= 2 {
info!("Running migration [revision 2]: Add username index to users.");
get_db()
.run_command(
doc! {
"createIndexes": "users",
"indexes": [
{
"key": {
"username": 1
},
"name": "username",
"unique": true,
"collation": {
"locale": "en",
"strength": 2
}
}
]
},
None,
)
.await
.expect("Failed to create username index.");
}
if revision <= 3 {
info!("Running migration [revision 3]: Changed enum tag type to channel_type.");
get_collection("channels")
.update_many(
doc! { },
doc! {
"$rename": {
"type": "channel_type"
}
},
None
)
.await
.expect("Failed to migrate channel type.");
}
// Reminder to update LATEST_REVISION when adding new migrations.
LATEST_REVISION
}