From 99edf5257ee56d4212c4bed7978a3d56dba29af2 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Wed, 9 Nov 2022 10:17:04 +0000 Subject: [PATCH] feat: imported users have importation date instead of registrataion date - Now registration date is optional (we allow NULL) for imported users. - And imported users have an importation date, which is NULL for registered users throught the sdantadrd registration process. --- ...092556_torrust_user_date_registered_allow_null.sql | 1 + .../20221109095718_torrust_user_add_date_imported.sql | 1 + ...092556_torrust_user_date_registered_allow_null.sql | 11 +++++++++++ .../20221109095718_torrust_user_add_date_imported.sql | 1 + src/models/user.rs | 6 ++++-- .../from_v1_0_0_to_v2_0_0/databases/sqlite_v2_0_0.rs | 8 ++++---- src/upgrades/from_v1_0_0_to_v2_0_0/upgrader.rs | 7 ++++--- 7 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 migrations/mysql/20221109092556_torrust_user_date_registered_allow_null.sql create mode 100644 migrations/mysql/20221109095718_torrust_user_add_date_imported.sql create mode 100644 migrations/sqlite3/20221109092556_torrust_user_date_registered_allow_null.sql create mode 100644 migrations/sqlite3/20221109095718_torrust_user_add_date_imported.sql diff --git a/migrations/mysql/20221109092556_torrust_user_date_registered_allow_null.sql b/migrations/mysql/20221109092556_torrust_user_date_registered_allow_null.sql new file mode 100644 index 00000000..9f936f8a --- /dev/null +++ b/migrations/mysql/20221109092556_torrust_user_date_registered_allow_null.sql @@ -0,0 +1 @@ +ALTER TABLE torrust_users CHANGE date_registered date_registered DATETIME NOT NULL \ No newline at end of file diff --git a/migrations/mysql/20221109095718_torrust_user_add_date_imported.sql b/migrations/mysql/20221109095718_torrust_user_add_date_imported.sql new file mode 100644 index 00000000..352a5e8f --- /dev/null +++ b/migrations/mysql/20221109095718_torrust_user_add_date_imported.sql @@ -0,0 +1 @@ +ALTER TABLE torrust_users ADD COLUMN date_imported DATETIME DEFAULT NULL \ No newline at end of file diff --git a/migrations/sqlite3/20221109092556_torrust_user_date_registered_allow_null.sql b/migrations/sqlite3/20221109092556_torrust_user_date_registered_allow_null.sql new file mode 100644 index 00000000..5757849c --- /dev/null +++ b/migrations/sqlite3/20221109092556_torrust_user_date_registered_allow_null.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS torrust_users_new ( + user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + date_registered TEXT DEFAULT NULL, + administrator BOOL NOT NULL DEFAULT FALSE +); + +INSERT INTO torrust_users_new SELECT * FROM torrust_users; + +DROP TABLE torrust_users; + +ALTER TABLE torrust_users_new RENAME TO torrust_users \ No newline at end of file diff --git a/migrations/sqlite3/20221109095718_torrust_user_add_date_imported.sql b/migrations/sqlite3/20221109095718_torrust_user_add_date_imported.sql new file mode 100644 index 00000000..96dddd2f --- /dev/null +++ b/migrations/sqlite3/20221109095718_torrust_user_add_date_imported.sql @@ -0,0 +1 @@ +ALTER TABLE torrust_users ADD COLUMN date_imported TEXT DEFAULT NULL \ No newline at end of file diff --git a/src/models/user.rs b/src/models/user.rs index fdf86f76..f1418f3a 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -3,7 +3,8 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone, sqlx::FromRow)] pub struct User { pub user_id: i64, - pub date_registered: String, + pub date_registered: Option, + pub date_imported: Option, pub administrator: bool, } @@ -33,7 +34,8 @@ pub struct UserCompact { #[derive(Debug, Serialize, Deserialize, Clone, sqlx::FromRow)] pub struct UserFull { pub user_id: i64, - pub date_registered: String, + pub date_registered: Option, + pub date_imported: Option, pub administrator: bool, pub username: String, pub email: String, diff --git a/src/upgrades/from_v1_0_0_to_v2_0_0/databases/sqlite_v2_0_0.rs b/src/upgrades/from_v1_0_0_to_v2_0_0/databases/sqlite_v2_0_0.rs index 836ed864..41d9327a 100644 --- a/src/upgrades/from_v1_0_0_to_v2_0_0/databases/sqlite_v2_0_0.rs +++ b/src/upgrades/from_v1_0_0_to_v2_0_0/databases/sqlite_v2_0_0.rs @@ -67,17 +67,17 @@ impl SqliteDatabaseV2_0_0 { }) } - pub async fn insert_user( + pub async fn insert_imported_user( &self, user_id: i64, - date_registered: &str, + date_imported: &str, administrator: bool, ) -> Result { query( - "INSERT INTO torrust_users (user_id, date_registered, administrator) VALUES (?, ?, ?)", + "INSERT INTO torrust_users (user_id, date_imported, administrator) VALUES (?, ?, ?)", ) .bind(user_id) - .bind(date_registered) + .bind(date_imported) .bind(administrator) .execute(&self.pool) .await diff --git a/src/upgrades/from_v1_0_0_to_v2_0_0/upgrader.rs b/src/upgrades/from_v1_0_0_to_v2_0_0/upgrader.rs index 9f783bb7..0c3d99fd 100644 --- a/src/upgrades/from_v1_0_0_to_v2_0_0/upgrader.rs +++ b/src/upgrades/from_v1_0_0_to_v2_0_0/upgrader.rs @@ -3,7 +3,8 @@ //! NOTES for `torrust_users` table transfer: //! //! - In v2, the table `torrust_user` contains a field `date_registered` non existing in v1. -//! It's used the day when the upgrade command is executed. +//! We changed that columns to allow NULL. WE also added the new column `date_imported` with +//! the datetime when the upgrader was executed. //! - In v2, the table `torrust_user_profiles` contains two new fields: `bio` and `avatar`. //! Empty string is used as default value. @@ -129,10 +130,10 @@ async fn transfer_user_data( &user.user_id, &user.username ); - let default_data_registered = today_iso8601(); + let date_imported = today_iso8601(); let id = dest_database - .insert_user(user.user_id, &default_data_registered, user.administrator) + .insert_imported_user(user.user_id, &date_imported, user.administrator) .await .unwrap();