From 9b6893ca48c193ba92f7652a6d40965c0d3434ca Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 14 Sep 2021 15:07:41 +0100 Subject: [PATCH] Write database migration for last_message_id. #67 --- set_version.sh | 2 +- src/database/entities/message.rs | 1 - src/database/migrations/scripts.rs | 58 +++++++++++++++++++++++++++++- src/version.rs | 2 +- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/set_version.sh b/set_version.sh index b576d45c..783f4f68 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.3-alpha.0-patch.1 +export version=0.5.3-alpha.1 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 7305e8c5..c853841e 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -9,7 +9,6 @@ use futures::StreamExt; use mongodb::options::UpdateOptions; use mongodb::{ bson::{doc, to_bson, DateTime, Document}, - options::FindOptions, }; use rauth::entities::{Model, Session}; use rocket::serde::json::Value; diff --git a/src/database/migrations/scripts.rs b/src/database/migrations/scripts.rs index d8ef0b81..c4e6bfbb 100644 --- a/src/database/migrations/scripts.rs +++ b/src/database/migrations/scripts.rs @@ -11,7 +11,7 @@ struct MigrationInfo { revision: i32, } -pub const LATEST_REVISION: i32 = 9; +pub const LATEST_REVISION: i32 = 10; pub async fn migrate_database() { let migrations = get_collection("migrations"); @@ -286,6 +286,62 @@ pub async fn run_migrations(revision: i32) -> i32 { .unwrap(); } + if revision <= 9 { + info!("Running migration [revision 9 / 2021-09-14]: Switch from last_message to last_message_id."); + + let mut cursor = get_collection("channels") + .find(doc! { }, None) + .await + .unwrap(); + + while let Some(doc) = cursor.next().await { + if let Ok(channel) = doc { + let channel_id = channel.get_str("_id").unwrap(); + if let Some(last_message) = channel.get("last_message") { + #[derive(Serialize, Deserialize, Debug, Clone)] + pub struct Obj { + #[serde(rename = "_id")] + id: String, + } + + #[derive(Serialize, Deserialize, Debug, Clone)] + #[serde(untagged)] + pub enum LastMessage { + Obj(Obj), + Id(String) + } + + let lm = from_bson::(last_message.clone()).unwrap(); + let id = match lm { + LastMessage::Obj(Obj { id }) => id, + LastMessage::Id(id) => id + }; + + info!("Converting session {} to new format.", &channel_id); + get_collection("channels") + .update_one( + doc! { + "_id": channel_id + }, + doc! { + "$set": { + "last_message_id": id + }, + "$unset": { + "last_message": 1, + } + }, + None + ) + .await + .unwrap(); + } else { + info!("{} has no last_message.", &channel_id); + } + } + } + } + // Need to migrate fields on attachments, change `user_id`, `object_id`, etc to `parent`. // Reminder to update LATEST_REVISION when adding new migrations. diff --git a/src/version.rs b/src/version.rs index 6e66639f..528324c5 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.3-alpha.0-patch.1"; +pub const VERSION: &str = "0.5.3-alpha.1";