From 3911405102e8f0352eab9e1bd5982bcc66d9dd62 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Sat, 9 May 2026 12:44:30 +0200 Subject: [PATCH] refactor(media): binders take BindContext arg --- packages/media/src/di/bind-dev-seed.test.ts | 8 ++++---- packages/media/src/di/bind-dev-seed.ts | 15 ++++----------- packages/media/src/di/bind-production.ts | 17 ++++------------- 3 files changed, 12 insertions(+), 28 deletions(-) diff --git a/packages/media/src/di/bind-dev-seed.test.ts b/packages/media/src/di/bind-dev-seed.test.ts index 27fda94..b6f8c70 100644 --- a/packages/media/src/di/bind-dev-seed.test.ts +++ b/packages/media/src/di/bind-dev-seed.test.ts @@ -33,7 +33,7 @@ describe("bindDevSeedMedia", () => { }); it("populates the repository with the dev media entries", async () => { - await bindDevSeedMedia(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedMedia({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const repo = mediaContainer.get( MEDIA_SYMBOLS.IMediaRepository, @@ -44,7 +44,7 @@ describe("bindDevSeedMedia", () => { }); it("seeds placeholder-1 reachable by id", async () => { - await bindDevSeedMedia(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedMedia({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const repo = mediaContainer.get( MEDIA_SYMBOLS.IMediaRepository, @@ -57,13 +57,13 @@ describe("bindDevSeedMedia", () => { }); it("is idempotent — calling twice rebuilds a fresh populated repo", async () => { - await bindDevSeedMedia(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedMedia({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const before = mediaContainer.get( MEDIA_SYMBOLS.IMediaRepository, ); const beforeCount = (await before.listMedia()).length; - await bindDevSeedMedia(noop.tracer, noop.logger, new RecordingEventBus(), new RecordingJobQueue(), new RecordingRealtimeBroadcaster(), new RealtimeHandlerRegistry()); + await bindDevSeedMedia({ ...noop, bus: new RecordingEventBus(), queue: new RecordingJobQueue(), realtime: new RecordingRealtimeBroadcaster(), realtimeRegistry: new RealtimeHandlerRegistry() }); const after = mediaContainer.get( MEDIA_SYMBOLS.IMediaRepository, ); diff --git a/packages/media/src/di/bind-dev-seed.ts b/packages/media/src/di/bind-dev-seed.ts index b935c99..fb05c7a 100644 --- a/packages/media/src/di/bind-dev-seed.ts +++ b/packages/media/src/di/bind-dev-seed.ts @@ -5,9 +5,7 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; -import type { IEventBus } from "@repo/core-events"; -import type { IRealtimeBroadcaster, IRealtimeHandlerRegistry } from "@repo/core-realtime"; -import type { IJobQueue } from "@repo/core-shared/jobs"; +import type { BindContext } from "@repo/core-shared/di"; import { mediaContainer } from "./container.js"; import { MEDIA_SYMBOLS } from "./symbols.js"; import { MockMediaRepository } from "../infrastructure/repositories/media.repository.mock.js"; @@ -30,14 +28,9 @@ import type { IMediaRepository } from "../application/repositories/media.reposit * Idempotent: safe to call multiple times; each call rebuilds a fresh * populated repo and rebinds the symbol. */ -export async function bindDevSeedMedia( - tracer: ITracer, - logger: ILogger, - bus: IEventBus, - queue: IJobQueue, - realtime: IRealtimeBroadcaster, - realtimeRegistry: IRealtimeHandlerRegistry, -): Promise { +export async function bindDevSeedMedia(ctx: BindContext): Promise { + const { tracer, logger, bus, queue, realtime, realtimeRegistry } = ctx; + // Bind shared instrumentation into feature container if (mediaContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { mediaContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER); diff --git a/packages/media/src/di/bind-production.ts b/packages/media/src/di/bind-production.ts index d5e4599..3c7c0f5 100644 --- a/packages/media/src/di/bind-production.ts +++ b/packages/media/src/di/bind-production.ts @@ -1,4 +1,3 @@ -import type { SanitizedConfig } from "payload"; import { withSpan, withCapture, @@ -6,9 +5,7 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; -import type { IEventBus } from "@repo/core-events"; -import type { IRealtimeBroadcaster, IRealtimeHandlerRegistry } from "@repo/core-realtime"; -import type { IJobQueue } from "@repo/core-shared/jobs"; +import type { BindProductionContext } from "@repo/core-shared/di"; import { mediaContainer } from "./container"; import { MEDIA_SYMBOLS } from "./symbols"; import { MediaRepository } from "../infrastructure/repositories/media.repository"; @@ -19,15 +16,9 @@ import { getMediaController } from "../interface-adapters/controllers/get-media. import { listMediaController } from "../interface-adapters/controllers/list-media.controller"; import { deleteMediaController } from "../interface-adapters/controllers/delete-media.controller"; -export function bindProductionMedia( - config: SanitizedConfig, - tracer: ITracer, - logger: ILogger, - bus: IEventBus, - queue: IJobQueue, - realtime: IRealtimeBroadcaster, - realtimeRegistry: IRealtimeHandlerRegistry, -): void { +export function bindProductionMedia(ctx: BindProductionContext): void { + const { config, tracer, logger, bus, queue, realtime, realtimeRegistry } = ctx; + // Bind shared instrumentation into feature container if (mediaContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { mediaContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER);