diff --git a/plugins/scaffolder-backend/src/tasks/Database.ts b/plugins/scaffolder-backend/src/tasks/Database.ts deleted file mode 100644 index c135380f87..0000000000 --- a/plugins/scaffolder-backend/src/tasks/Database.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2021 Spotify AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ConflictError, resolvePackagePath } from '@backstage/backend-common'; -import Knex from 'knex'; -import { Logger } from 'winston'; -import { Database, Transaction } from './types'; - -const migrationsDir = resolvePackagePath( - '@backstage/plugin-scaffolder-backend', - 'migrations', -); - -export class CommonDatabase implements Database { - static async create(knex: Knex, logger: Logger): Promise { - await knex.migrate.latest({ - directory: migrationsDir, - }); - return new CommonDatabase(knex, logger); - } - - constructor( - private readonly database: Knex, - private readonly logger: Logger, - ) {} - - async transaction(fn: (tx: Transaction) => Promise): Promise { - try { - let result: T | undefined = undefined; - - await this.database.transaction( - async tx => { - // We can't return here, as knex swallows the return type in case the transaction is rolled back: - // https://github.com/knex/knex/blob/e37aeaa31c8ef9c1b07d2e4d3ec6607e557d800d/lib/transaction.js#L136 - result = await fn(tx); - }, - { - // If we explicitly trigger a rollback, don't fail. - doNotRejectOnRollback: true, - }, - ); - - return result!; - } catch (e) { - this.logger.debug(`Error during transaction, ${e}`); - - if ( - /SQLITE_CONSTRAINT: UNIQUE/.test(e.message) || - /unique constraint/.test(e.message) - ) { - throw new ConflictError(`Rejected due to a conflicting entity`, e); - } - - throw e; - } - } -} diff --git a/plugins/scaffolder-backend/src/tasks/types.ts b/plugins/scaffolder-backend/src/tasks/types.ts deleted file mode 100644 index 27cbe7f7f1..0000000000 --- a/plugins/scaffolder-backend/src/tasks/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2021 Spotify AB - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The core database implementation. - */ -export interface Database { - /** - * Runs a transaction. - * - * The callback is expected to make calls back into this class. When it - * completes, the transaction is closed. - * - * @param fn The callback that implements the transaction - */ - transaction(fn: (tx: Transaction) => Promise): Promise; -} - -/** - * An abstraction for transactions of the underlying database technology. - */ -export type Transaction = { - rollback(): Promise; -};