From 67072166a94e5c0cde8c8e89e0651f5a9531c953 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Feb 2024 12:14:50 +0100 Subject: [PATCH] backend-{common,tasks}: stop depending on full DatabaseManager type Signed-off-by: Patrik Oldsberg --- .changeset/brave-jobs-invite.md | 5 +++++ .changeset/lazy-dolls-roll.md | 5 +++++ packages/backend-common/api-report.md | 7 ++++++- .../backend-common/src/database/DatabaseManager.ts | 11 ++++++++++- packages/backend-tasks/api-report.md | 6 +++--- packages/backend-tasks/src/tasks/TaskScheduler.ts | 5 +++-- 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 .changeset/brave-jobs-invite.md create mode 100644 .changeset/lazy-dolls-roll.md diff --git a/.changeset/brave-jobs-invite.md b/.changeset/brave-jobs-invite.md new file mode 100644 index 0000000000..402c5cebe7 --- /dev/null +++ b/.changeset/brave-jobs-invite.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Added a new `LegacyRootDatabaseService` interface that can be used to avoid direct dependencies on the `DatabaseManager`. diff --git a/.changeset/lazy-dolls-roll.md b/.changeset/lazy-dolls-roll.md new file mode 100644 index 0000000000..da375727cc --- /dev/null +++ b/.changeset/lazy-dolls-roll.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-tasks': patch +--- + +The `TaskScheduler.fromConfig` method now accepts the `LegacyRootDatabaseService` interface rather than the full `DatabaseManager` implementation. diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index e4a1ecfdf1..6c9b63ae11 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -249,7 +249,7 @@ export function createStatusCheckRouter(options: { }): Promise; // @public -export class DatabaseManager { +export class DatabaseManager implements LegacyRootDatabaseService { forPlugin( pluginId: string, deps?: { @@ -555,6 +555,11 @@ export const legacyPlugin: ( }>, ) => BackendFeature; +// @public +export type LegacyRootDatabaseService = { + forPlugin(pluginId: string): PluginDatabaseManager; +}; + // @public export function loadBackendConfig(options: { logger: LoggerService; diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index 7564f82028..8a4a4b50fa 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -30,6 +30,7 @@ import { import { PluginDatabaseManager } from './types'; import path from 'path'; import { + DatabaseService, LifecycleService, LoggerService, PluginMetadataService, @@ -53,6 +54,14 @@ export type DatabaseManagerOptions = { logger?: LoggerService; }; +/** + * An interface that represents the legacy global DatabaseManager implementation. + * @public + */ +export type LegacyRootDatabaseService = { + forPlugin(pluginId: string): DatabaseService; +}; + /** * Manages database connections for Backstage backend plugins. * @@ -65,7 +74,7 @@ export type DatabaseManagerOptions = { * set `prefix` which is used to prefix generated database names if config is * not provided. */ -export class DatabaseManager { +export class DatabaseManager implements LegacyRootDatabaseService { /** * Creates a {@link DatabaseManager} from `backend.database` config. * diff --git a/packages/backend-tasks/api-report.md b/packages/backend-tasks/api-report.md index 1d978068b3..417fc93ed4 100644 --- a/packages/backend-tasks/api-report.md +++ b/packages/backend-tasks/api-report.md @@ -4,10 +4,10 @@ ```ts import { Config } from '@backstage/config'; -import { DatabaseManager } from '@backstage/backend-common'; import { Duration } from 'luxon'; import { HumanDuration as HumanDuration_2 } from '@backstage/types'; import { JsonObject } from '@backstage/types'; +import { LegacyRootDatabaseService } from '@backstage/backend-common'; import { Logger } from 'winston'; import { PluginDatabaseManager } from '@backstage/backend-common'; @@ -83,7 +83,7 @@ export interface TaskScheduleDefinitionConfig { // @public export class TaskScheduler { - constructor(databaseManager: DatabaseManager, logger: Logger); + constructor(databaseManager: LegacyRootDatabaseService, logger: Logger); forPlugin(pluginId: string): PluginTaskScheduler; // (undocumented) static forPlugin(opts: { @@ -95,7 +95,7 @@ export class TaskScheduler { static fromConfig( config: Config, options?: { - databaseManager?: DatabaseManager; + databaseManager?: LegacyRootDatabaseService; logger?: Logger; }, ): TaskScheduler; diff --git a/packages/backend-tasks/src/tasks/TaskScheduler.ts b/packages/backend-tasks/src/tasks/TaskScheduler.ts index 6b6436e52a..bd7bf0f776 100644 --- a/packages/backend-tasks/src/tasks/TaskScheduler.ts +++ b/packages/backend-tasks/src/tasks/TaskScheduler.ts @@ -17,6 +17,7 @@ import { DatabaseManager, getRootLogger, + LegacyRootDatabaseService, PluginDatabaseManager, } from '@backstage/backend-common'; import { Config } from '@backstage/config'; @@ -37,7 +38,7 @@ export class TaskScheduler { static fromConfig( config: Config, options?: { - databaseManager?: DatabaseManager; + databaseManager?: LegacyRootDatabaseService; logger?: Logger; }, ): TaskScheduler { @@ -50,7 +51,7 @@ export class TaskScheduler { } constructor( - private readonly databaseManager: DatabaseManager, + private readonly databaseManager: LegacyRootDatabaseService, private readonly logger: Logger, ) {}