Browse Source

improve migration runner

pull/1344/head
Bernd Storath 2 years ago
parent
commit
e8c614ae3f
  1. 11
      src/services/database/lowdb.ts
  2. 2
      src/services/database/migrations/1.ts
  3. 28
      src/services/database/migrations/index.ts

11
src/services/database/lowdb.ts

@ -26,6 +26,9 @@ export default class LowDB extends DatabaseProvider {
this.#db = await JSONFilePreset(dbFilePath, DEFAULT_DATABASE); this.#db = await JSONFilePreset(dbFilePath, DEFAULT_DATABASE);
} }
/**
* @throws
*/
async connect() { async connect() {
try { try {
// load file db // load file db
@ -36,12 +39,8 @@ export default class LowDB extends DatabaseProvider {
DEBUG('Database does not exist : ', error); DEBUG('Database does not exist : ', error);
} }
try { await this.__init();
await this.__init(); await migrationRunner(this.#db);
await migrationRunner(this.#db);
} catch {
throw new DatabaseError(DatabaseError.ERROR_INIT);
}
DEBUG('Connected successfully'); DEBUG('Connected successfully');
} }

2
src/services/database/migrations/1.ts

@ -30,7 +30,7 @@ export async function run1(db: Low<Database>) {
log: 'echo ***hidden*** | wg pubkey', log: 'echo ***hidden*** | wg pubkey',
}); });
const database: Database = { const database: Database = {
migrations: ['1'], migrations: [],
system: { system: {
release: packageJson.release.version, release: packageJson.release.version,
interface: { interface: {

28
src/services/database/migrations/index.ts

@ -2,9 +2,31 @@ import type { Low } from 'lowdb';
import type { Database } from '../repositories/database'; import type { Database } from '../repositories/database';
import { run1 } from './1'; import { run1 } from './1';
export type MIGRATION_FN = (db: Low<Database>) => Promise<void>;
const MIGRATION_LIST = {
'1': run1,
} satisfies Record<string, MIGRATION_FN>;
/**
* Runs all migrations
* @throws
*/
export async function migrationRunner(db: Low<Database>) { export async function migrationRunner(db: Low<Database>) {
const migrations = db.data.migrations; const ranMigrations = db.data.migrations;
if (!migrations.includes('1')) { const runMigrations = Object.keys(
await run1(db); MIGRATION_LIST
) as (keyof typeof MIGRATION_LIST)[];
for (const migrationId of runMigrations) {
if (ranMigrations.includes(migrationId)) {
continue;
}
try {
await MIGRATION_LIST[migrationId](db);
db.data.migrations.push(migrationId);
} catch {
throw new Error(`Failed to run Migration $`);
}
} }
await db.write();
} }

Loading…
Cancel
Save