diff --git a/services/identity/src/client_service.rs b/services/identity/src/client_service.rs --- a/services/identity/src/client_service.rs +++ b/services/identity/src/client_service.rs @@ -1288,6 +1288,7 @@ platform_metadata, login_time, device_list_payload, + None, ) .await?; diff --git a/services/identity/src/database.rs b/services/identity/src/database.rs --- a/services/identity/src/database.rs +++ b/services/identity/src/database.rs @@ -184,6 +184,7 @@ platform_details, access_token_creation_time, initial_device_list, + None, ) .await?; } else { @@ -245,6 +246,7 @@ platform_metadata, access_token_creation_time, initial_device_list, + None, ) .await?; } else { diff --git a/services/identity/src/database/device_list.rs b/services/identity/src/database/device_list.rs --- a/services/identity/src/database/device_list.rs +++ b/services/identity/src/database/device_list.rs @@ -9,6 +9,7 @@ DeleteRequest, Put, TransactWriteItem, Update, WriteRequest, }, }, + backup::database::BackupItem, database::{ batch_operations::ExponentialBackoffConfig, AttributeExtractor, AttributeMap, DBItemAttributeError, DBItemError, DynamoDBError, @@ -1324,6 +1325,7 @@ platform_metadata: PlatformMetadata, login_time: DateTime, singleton_device_list: DeviceListUpdate, + backup_item: Option, ) -> Result<(), Error> { let user_id: String = user_id.into(); self @@ -1368,9 +1370,15 @@ let put_device_operation = TransactWriteItem::builder().put(put_device).build(); - let update_info = + let mut update_info = UpdateOperationInfo::primary_device_issued(singleton_device_list) .with_ddb_operation(put_device_operation); + + if let Some(backup_item) = backup_item { + let operation = prepare_user_keys_ddb_operation(backup_item); + update_info = update_info.with_ddb_operation(operation); + } + Ok(update_info) }) .await?; @@ -1995,6 +2003,20 @@ } } +fn prepare_user_keys_ddb_operation( + backup_item: BackupItem, +) -> TransactWriteItem { + use comm_lib::backup::database::backup_table; + + let put_user_keys = Put::builder() + .table_name(backup_table::TABLE_NAME) + .set_item(Some(backup_item.into())) + .build() + .expect("table_name or item not set in Put builder"); + + TransactWriteItem::builder().put(put_user_keys).build() +} + // Helper module for "migration" code into new device list schema. // We can get rid of this when primary device takes over the responsibility // of managing the device list.