From 1e12c7f5f188cdf221d876e2b6e4faf6908d9b83 Mon Sep 17 00:00:00 2001 From: Dominik Schwank Date: Thu, 1 Sep 2022 11:03:32 +0200 Subject: [PATCH] feat: support skip migration Signed-off-by: Dominik Schwank --- plugins/user-settings-backend/api-report.md | 9 +++----- .../DatabaseUserSettingsStore.test.ts | 11 ++++++++- .../src/database/DatabaseUserSettingsStore.ts | 23 ++++++++++++++----- .../src/service/index.ts | 6 +---- .../src/service/router.ts | 11 ++------- .../src/service/standaloneServer.ts | 4 +++- 6 files changed, 36 insertions(+), 28 deletions(-) diff --git a/plugins/user-settings-backend/api-report.md b/plugins/user-settings-backend/api-report.md index b3b40970c9..47e59637d6 100644 --- a/plugins/user-settings-backend/api-report.md +++ b/plugins/user-settings-backend/api-report.md @@ -13,17 +13,14 @@ export function createRouter( options: RouterOptions, ): Promise; -// @public (undocumented) -export function createUserSettingsStore( - database: PluginDatabaseManager, -): Promise; - // @public export class DatabaseUserSettingsStore implements UserSettingsStore { // (undocumented) - static create(knex: Knex): Promise; + static create(options: { + database: PluginDatabaseManager; + }): Promise; // (undocumented) delete( tx: Knex.Transaction, diff --git a/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.test.ts b/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.test.ts index 717707f034..547beaa6b6 100644 --- a/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.test.ts +++ b/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.test.ts @@ -29,9 +29,18 @@ const databases = TestDatabases.create({ async function createStore(databaseId: TestDatabaseId) { const knex = await databases.init(databaseId); + const databaseManager = { + getClient: async () => knex, + migrations: { + skip: false, + }, + }; + return { knex, - storage: await DatabaseUserSettingsStore.create(knex), + storage: await DatabaseUserSettingsStore.create({ + database: databaseManager, + }), }; } diff --git a/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.ts b/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.ts index fd24a6f3e5..2e2eb6318a 100644 --- a/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.ts +++ b/plugins/user-settings-backend/src/database/DatabaseUserSettingsStore.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; @@ -42,11 +45,19 @@ export type RawDbUserSettingsRow = { export class DatabaseUserSettingsStore implements UserSettingsStore { - static async create(knex: Knex): Promise { - await knex.migrate.latest({ - directory: migrationsDir, - }); - return new DatabaseUserSettingsStore(knex); + static async create(options: { + database: PluginDatabaseManager; + }): Promise { + const { database } = options; + const client = await database.getClient(); + + if (!database.migrations?.skip) { + await client.migrate.latest({ + directory: migrationsDir, + }); + } + + return new DatabaseUserSettingsStore(client); } private constructor(private readonly db: Knex) {} diff --git a/plugins/user-settings-backend/src/service/index.ts b/plugins/user-settings-backend/src/service/index.ts index 5f4020dc68..8f3e084d24 100644 --- a/plugins/user-settings-backend/src/service/index.ts +++ b/plugins/user-settings-backend/src/service/index.ts @@ -13,8 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { - createRouter, - createUserSettingsStore, - type RouterOptions, -} from './router'; +export { createRouter, type RouterOptions } from './router'; diff --git a/plugins/user-settings-backend/src/service/router.ts b/plugins/user-settings-backend/src/service/router.ts index a715433dcb..0a8c52b156 100644 --- a/plugins/user-settings-backend/src/service/router.ts +++ b/plugins/user-settings-backend/src/service/router.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { PluginDatabaseManager, errorHandler } from '@backstage/backend-common'; +import { errorHandler } from '@backstage/backend-common'; import { AuthenticationError, InputError } from '@backstage/errors'; import { getBearerTokenFromAuthorizationHeader, @@ -22,14 +22,7 @@ import { import express, { Request } from 'express'; import Router from 'express-promise-router'; -import { DatabaseUserSettingsStore, UserSettingsStore } from '../database'; - -/** - * @public - */ -export async function createUserSettingsStore(database: PluginDatabaseManager) { - return await DatabaseUserSettingsStore.create(await database.getClient()); -} +import { UserSettingsStore } from '../database'; /** * @public diff --git a/plugins/user-settings-backend/src/service/standaloneServer.ts b/plugins/user-settings-backend/src/service/standaloneServer.ts index 39ef0ba098..1e079f02c0 100644 --- a/plugins/user-settings-backend/src/service/standaloneServer.ts +++ b/plugins/user-settings-backend/src/service/standaloneServer.ts @@ -52,7 +52,9 @@ export async function startStandaloneServer( } as IdentityClient; const router = await createRouter({ - userSettingsStore: await DatabaseUserSettingsStore.create(database), + userSettingsStore: await DatabaseUserSettingsStore.create({ + database: { getClient: async () => database }, + }), identity: identityMock, });