77//! - In v2, the table `torrust_user_profiles` contains two new fields: `bio` and `avatar`.
88//! Empty string is used as default value.
99
10+ use crate :: upgrades:: from_v1_0_0_to_v2_0_0:: databases:: sqlite_v1_0_0:: SqliteDatabaseV1_0_0 ;
1011use crate :: upgrades:: from_v1_0_0_to_v2_0_0:: databases:: sqlite_v2_0_0:: SqliteDatabaseV2_0_0 ;
11- use crate :: {
12- upgrades:: from_v1_0_0_to_v2_0_0:: databases:: sqlite_v1_0_0:: SqliteDatabaseV1_0_0 ,
13- } ;
1412use chrono:: prelude:: { DateTime , Utc } ;
1513use std:: { sync:: Arc , time:: SystemTime } ;
1614
@@ -41,7 +39,7 @@ async fn new_db(db_filename: String) -> Arc<SqliteDatabaseV2_0_0> {
4139}
4240
4341async fn migrate_destiny_database ( dest_database : Arc < SqliteDatabaseV2_0_0 > ) {
44- println ! ( "Running migrations ..." ) ;
42+ println ! ( "Running migrations in destiny database ..." ) ;
4543 dest_database. migrate ( ) . await ;
4644}
4745
@@ -57,6 +55,8 @@ async fn transfer_categories(
5755 source_database : Arc < SqliteDatabaseV1_0_0 > ,
5856 dest_database : Arc < SqliteDatabaseV2_0_0 > ,
5957) {
58+ println ! ( "Transferring categories ..." ) ;
59+
6060 let source_categories = source_database. get_categories_order_by_id ( ) . await . unwrap ( ) ;
6161 println ! ( "[v1] categories: {:?}" , & source_categories) ;
6262
@@ -91,7 +91,9 @@ async fn transfer_user_data(
9191 source_database : Arc < SqliteDatabaseV1_0_0 > ,
9292 dest_database : Arc < SqliteDatabaseV2_0_0 > ,
9393) {
94- // Transfer `torrust_users`
94+ println ! ( "Transferring users ..." ) ;
95+
96+ // Transfer table `torrust_users`
9597
9698 let users = source_database. get_users ( ) . await . unwrap ( ) ;
9799
@@ -168,6 +170,48 @@ async fn transfer_user_data(
168170 }
169171}
170172
173+ async fn transfer_tracker_keys (
174+ source_database : Arc < SqliteDatabaseV1_0_0 > ,
175+ dest_database : Arc < SqliteDatabaseV2_0_0 > ,
176+ ) {
177+ println ! ( "Transferring tracker keys ..." ) ;
178+
179+ // Transfer table `torrust_tracker_keys`
180+
181+ let tracker_keys = source_database. get_tracker_keys ( ) . await . unwrap ( ) ;
182+
183+ for tracker_key in & tracker_keys {
184+ // [v2] table torrust_tracker_keys
185+
186+ println ! (
187+ "[v2][torrust_users] adding the tracker key: {:?} ..." ,
188+ & tracker_key. key_id
189+ ) ;
190+
191+ let id = dest_database
192+ . insert_tracker_key (
193+ tracker_key. key_id ,
194+ tracker_key. user_id ,
195+ & tracker_key. key ,
196+ tracker_key. valid_until ,
197+ )
198+ . await
199+ . unwrap ( ) ;
200+
201+ if id != tracker_key. key_id {
202+ panic ! (
203+ "Error copying tracker key {:?} from source DB to destiny DB" ,
204+ & tracker_key. key_id
205+ ) ;
206+ }
207+
208+ println ! (
209+ "[v2][torrust_tracker_keys] tracker key: {:?} added." ,
210+ & tracker_key. key_id
211+ ) ;
212+ }
213+ }
214+
171215pub async fn upgrade ( ) {
172216 // Get connections to source adn destiny databases
173217 let source_database = current_db ( ) . await ;
@@ -179,6 +223,7 @@ pub async fn upgrade() {
179223 reset_destiny_database ( dest_database. clone ( ) ) . await ;
180224 transfer_categories ( source_database. clone ( ) , dest_database. clone ( ) ) . await ;
181225 transfer_user_data ( source_database. clone ( ) , dest_database. clone ( ) ) . await ;
226+ transfer_tracker_keys ( source_database. clone ( ) , dest_database. clone ( ) ) . await ;
182227
183228 // TODO: WIP. We have to transfer data from the 5 tables in V1 and the torrent files in folder `uploads`.
184229}
0 commit comments