mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-06-04 08:49:59 -04:00
feat(database): show information about migration status
Co-authored-by: Philip Molares <philip.molares@udo.edu> Signed-off-by: Philip Molares <philip.molares@udo.edu> Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
parent
6e39b445e5
commit
04d19ebfbc
2 changed files with 58 additions and 3 deletions
|
@ -15,6 +15,7 @@ import { AuthConfig } from './config/auth.config';
|
|||
import { MediaConfig } from './config/media.config';
|
||||
import { ErrorExceptionMapping } from './errors/error-mapping';
|
||||
import { ConsoleLoggerService } from './logger/console-logger.service';
|
||||
import { runMigrations } from './migrate';
|
||||
import { SessionService } from './sessions/session.service';
|
||||
import { setupSessionMiddleware } from './utils/session';
|
||||
import { setupValidationPipe } from './utils/setup-pipes';
|
||||
|
@ -44,11 +45,9 @@ export async function setupApp(
|
|||
);
|
||||
}
|
||||
|
||||
logger.log('Starting database migrations... ', 'AppBootstrap');
|
||||
const knexConnectionToken = getConnectionToken();
|
||||
const knex: Knex = app.get<Knex>(knexConnectionToken);
|
||||
await knex.migrate.latest();
|
||||
logger.log('Finished database migrations... ', 'AppBootstrap');
|
||||
await runMigrations(knex, logger);
|
||||
|
||||
// Setup session handling
|
||||
setupSessionMiddleware(
|
||||
|
|
56
backend/src/migrate.ts
Normal file
56
backend/src/migrate.ts
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2025 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import { Knex } from 'knex';
|
||||
|
||||
import { ConsoleLoggerService } from './logger/console-logger.service';
|
||||
|
||||
interface CompletedMigration {
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface PendingMigration {
|
||||
file: string;
|
||||
directory: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the database migrations and informs the user about already completed and still pending ones
|
||||
*
|
||||
* @param knex The configured Knex instance to use
|
||||
* @param logger The console logger service to use
|
||||
*/
|
||||
export async function runMigrations(
|
||||
knex: Knex,
|
||||
logger: ConsoleLoggerService,
|
||||
): Promise<void> {
|
||||
logger.log('Checking for pending database migrations... ', 'runMigrations');
|
||||
try {
|
||||
const [completedMigrations, pendingMigrations] =
|
||||
(await knex.migrate.list()) as [CompletedMigration[], PendingMigration[]];
|
||||
logger.log(
|
||||
`Found ${completedMigrations.length} already completed migrations and ${pendingMigrations.length} pending migrations.`,
|
||||
'runMigrations',
|
||||
);
|
||||
for (const migration of completedMigrations) {
|
||||
logger.log(
|
||||
`Already applied migration ${migration.name}`,
|
||||
'runMigrations',
|
||||
);
|
||||
}
|
||||
for (const migration of pendingMigrations) {
|
||||
logger.log(`Applying migration ${migration.file}`, 'runMigrations');
|
||||
await knex.migrate.up();
|
||||
logger.log('✅', 'runMigrations');
|
||||
}
|
||||
} catch (error: unknown) {
|
||||
logger.error(
|
||||
`Error while migrating database: ${String(error)}`,
|
||||
'runMigrations',
|
||||
);
|
||||
}
|
||||
|
||||
logger.log('Finished database migrations... ', 'runMigrations');
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue