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);
}
/**
* @throws
*/
async connect() {
try {
// load file db
@ -36,12 +39,8 @@ export default class LowDB extends DatabaseProvider {
DEBUG('Database does not exist : ', error);
}
try {
await this.__init();
await migrationRunner(this.#db);
} catch {
throw new DatabaseError(DatabaseError.ERROR_INIT);
}
await this.__init();
await migrationRunner(this.#db);
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',
});
const database: Database = {
migrations: ['1'],
migrations: [],
system: {
release: packageJson.release.version,
interface: {

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

@ -2,9 +2,31 @@ import type { Low } from 'lowdb';
import type { Database } from '../repositories/database';
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>) {
const migrations = db.data.migrations;
if (!migrations.includes('1')) {
await run1(db);
const ranMigrations = db.data.migrations;
const runMigrations = Object.keys(
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