use indexed_db_futures::{
error::OpenDbError, query_source::QuerySource, transaction::TransactionMode, Build,
};
use wasm_bindgen::JsValue;
use crate::{
crypto_store::{
keys,
migrations::{do_schema_upgrade, old_keys, MigrationDb},
},
serializer::SafeEncodeSerializer,
};
pub(crate) async fn data_migrate(
name: &str,
serializer: &SafeEncodeSerializer,
) -> crate::crypto_store::Result<()> {
let db = MigrationDb::new(name, 11).await?;
let txn = db.transaction(keys::BACKUP_KEYS).with_mode(TransactionMode::Readwrite).build()?;
let store = txn.object_store(keys::BACKUP_KEYS)?;
let bv = store.get(&JsValue::from_str(old_keys::BACKUP_KEY_V1)).await?;
let Some(bv) = bv else {
return Ok(());
};
let bv: String = serializer.deserialize_legacy_value(bv)?;
let serialized = serializer.serialize_value(&bv)?;
store.put(&serialized).with_key(JsValue::from_str(keys::BACKUP_VERSION_V1)).await?;
store.delete(&JsValue::from_str(old_keys::BACKUP_KEY_V1)).await?;
txn.commit().await?;
Ok(())
}
pub(crate) async fn schema_bump(name: &str) -> crate::crypto_store::Result<(), OpenDbError> {
do_schema_upgrade(name, 11, |_, _| Ok(())).await
}