Matthew Aaron Raymer
2 years ago
8 changed files with 7 additions and 119 deletions
@ -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", |
|||
} |
@ -1,6 +0,0 @@ |
|||
/** |
|||
* Dexie table names used by the DexieWrapper service. |
|||
*/ |
|||
export enum AppTable { |
|||
ACCOUNTS = "Accounts-Table", |
|||
} |
@ -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; |
|||
} |
@ -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 |
|||
); |
@ -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, |
|||
}; |
|||
} |
Loading…
Reference in new issue