Cleaned up old Dexie class. Added mnemonic and dateCreated columns.

This commit is contained in:
Matthew Aaron Raymer
2022-12-16 13:34:01 +08:00
parent c9d5ab82fd
commit 607230b51c
8 changed files with 7 additions and 119 deletions

View File

@@ -1,27 +0,0 @@
/**
* Field names used by the tables for the DB objects.
*/
export enum Field {
// Setting
KEY = "key",
VALUE = "value",
// Log
SEVERITY = "severity",
LABEL = "label",
ERROR = "error",
// Accounts
NAME = "name",
DESCRIPTION = "description",
ID = "id",
IDENTITY = "indentity",
CREATED_TIMESTAMP = "createdTimestamp",
STATUS = "status",
}
export enum Severity {
DEBUG = "Debug",
INFO = "Info",
WARN = "Warning",
ERROR = "Error",
CRITICAL = "Critical",
}

View File

@@ -1,6 +0,0 @@
/**
* Dexie table names used by the DexieWrapper service.
*/
export enum AppTable {
ACCOUNTS = "Accounts-Table",
}

View File

@@ -3,13 +3,16 @@ import { Table } from "dexie";
export type Account = {
id?: number;
publicKey: string;
mnemonic: string;
identity: string;
dateCreated: number;
};
export type AccountsTable = {
accounts: Table<Account>;
};
// mark encrypted field by starting with a $ character
export const accountsSchema = {
accounts: "++id, publicKey, $identity",
accounts: "++id, publicKey, $mnemonic, $identity, dateCreated",
};

View File

@@ -1,9 +0,0 @@
import type { Field } from "@/constants/model";
export interface IDBAccount {
[Field.ID]?: string;
[Field.IDENTITY]: string;
[Field.NAME]: string;
[Field.DESCRIPTION]: string;
[Field.CREATED_TIMESTAMP]: number;
}

View File

@@ -1,34 +0,0 @@
import Dexie, { type Table } from "dexie";
import { encrypted, Encryption } from "@pvermeer/dexie-encrypted-addon";
import { AppString } from "@/constants/app";
import { AppTable } from "../constants/table";
import { Field } from "@/constants/model";
import { IDBAccount } from "@/models/Account";
export class DexieWrapper extends Dexie {
[AppTable.ACCOUNTS]!: Table<IDBAccount>;
constructor(name: string, secret: string) {
super(name, { autoOpen: true });
encrypted(this, { secretKey: secret });
this.version(1).stores({
[AppTable.ACCOUNTS]: `#&${Field.ID}, $${Field.IDENTITY}`,
});
}
}
const secret =
localStorage.getItem("secret") || Encryption.createRandomEncryptionKey();
if (localStorage.getItem("secret") == null) {
localStorage.setItem("secret", secret);
}
/**
* Preconfigured DexieWrapper
*/
export const dexieWrapper = new DexieWrapper(
`${AppString.APP_NAME} v${AppString.VERSION}`,
secret
);

View File

@@ -1,41 +0,0 @@
import type { IndexableType } from "dexie";
import { AppTable } from "@/constants/table";
import { Field } from "@/constants/model";
import { dexieWrapper } from "@/services/DexieWrapper";
import type { IDBAccount } from "@/models/Account";
export default function useDBAccounts() {
/**
* Gets all data from the Logs table.
* @returns IDBAccount[]
*/
async function getAccountsTable(): Promise<IDBAccount[]> {
return await dexieWrapper.table(AppTable.ACCOUNTS).toArray();
}
/**
* Adds an Account to the database.
* @param name
* @param description
* @param identity
* @returns Id of new Account
*/
async function addAccount(
name: string,
description: string,
identity: string
): Promise<IndexableType> {
const account: IDBAccount = {
[Field.CREATED_TIMESTAMP]: new Date().getTime(),
[Field.NAME]: name,
[Field.DESCRIPTION]: description,
[Field.IDENTITY]: identity,
};
return await dexieWrapper.table(AppTable.ACCOUNTS).add(account);
}
return {
getAccountsTable,
addAccount,
};
}

View File

@@ -228,7 +228,9 @@ export default class AccountViewView extends Vue {
odexie._allTables.accounts
.add({
publicKey: newId.keys[0].publicKeyHex,
mnemonic: mnemonic,
identity: JSON.stringify(newId),
dateCreated: new Date().getTime(),
})
.then(function () {
odexie._allTables.accounts.each(function (account) {

View File

@@ -5,6 +5,6 @@ module.exports = defineConfig({
devtool: "source-map",
experiments: {
topLevelAwait: true,
}
},
},
});