wallet-core: backwards compatibility for bankAccounts store, naming conventions

This commit is contained in:
Florian Dold 2022-09-23 21:00:51 +02:00
parent 72336b149b
commit 8d19b80153
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
4 changed files with 44 additions and 5 deletions

View File

@ -70,7 +70,31 @@ function upgradeFromStoreMap(
return;
}
logger.info(`upgrading database from ${oldVersion} to ${newVersion}`);
throw Error("upgrade not supported");
for (const n in storeMap) {
const swi: StoreWithIndexes<any, StoreDescriptor<unknown>, any> = storeMap[
n
];
const storeDesc: StoreDescriptor<unknown> = swi.store;
const storeAddedVersion = storeDesc.versionAdded ?? 0;
if (storeAddedVersion <= oldVersion) {
continue;
}
const s = db.createObjectStore(swi.storeName, {
autoIncrement: storeDesc.autoIncrement,
keyPath: storeDesc.keyPath,
});
for (const indexName in swi.indexMap as any) {
const indexDesc: IndexDescriptor = swi.indexMap[indexName];
const indexAddedVersion = indexDesc.versionAdded ?? 0;
if (indexAddedVersion <= oldVersion) {
continue;
}
s.createIndex(indexDesc.name, indexDesc.keyPath, {
multiEntry: indexDesc.multiEntry,
unique: indexDesc.unique,
});
}
}
}
function promiseFromTransaction(transaction: IDBTransaction): Promise<void> {

View File

@ -96,7 +96,7 @@ export const CURRENT_DB_CONFIG_KEY = "currentMainDbName";
* backwards-compatible way or object stores and indices
* are added.
*/
export const WALLET_DB_MINOR_VERSION = 1;
export const WALLET_DB_MINOR_VERSION = 2;
export namespace OperationStatusRange {
export const ACTIVE_START = 10;
@ -2088,6 +2088,7 @@ export const WalletStoresV1 = {
"bankAccounts",
describeContents<BankAccountsRecord>({
keyPath: "uri",
versionAdded: 2,
}),
{},
),
@ -2099,7 +2100,7 @@ export const WalletStoresV1 = {
export interface BankAccountsRecord {
uri: string;
currency: string;
kyc_completed: boolean;
kycCompleted: boolean;
alias: string;
}

View File

@ -284,17 +284,29 @@ export interface IndexDescriptor {
keyPath: IDBKeyPath | IDBKeyPath[];
multiEntry?: boolean;
unique?: boolean;
versionAdded?: number;
}
export interface StoreDescriptor<RecordType> {
_dummy: undefined & RecordType;
keyPath?: IDBKeyPath | IDBKeyPath[];
autoIncrement?: boolean;
/**
* Database version that this store was added in, or
* undefined if added in the first version.
*/
versionAdded?: number;
}
export interface StoreOptions {
keyPath?: IDBKeyPath | IDBKeyPath[];
autoIncrement?: boolean;
/**
* Database version that this store was added in, or
* undefined if added in the first version.
*/
versionAdded?: number;
}
export function describeContents<RecordType = never>(
@ -304,6 +316,7 @@ export function describeContents<RecordType = never>(
keyPath: options.keyPath,
_dummy: undefined as any,
autoIncrement: options.autoIncrement,
versionAdded: options.versionAdded,
};
}
@ -317,6 +330,7 @@ export function describeIndex(
name,
multiEntry: options.multiEntry,
unique: options.unique,
versionAdded: options.versionAdded,
};
}

View File

@ -686,7 +686,7 @@ async function listKnownBankAccounts(
accounts.push({
uri: payto,
alias: r.alias,
kyc_completed: r.kyc_completed,
kyc_completed: r.kycCompleted,
currency: r.currency,
});
}
@ -710,7 +710,7 @@ async function addKnownBankAccounts(
uri: payto,
alias: alias,
currency: currency,
kyc_completed: false,
kycCompleted: false,
});
});
return;