From d6fe37450a344d229ce52b4cac004f67c5648d43 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Fri, 8 May 2026 15:17:40 +0200 Subject: [PATCH] feat(blog): bind binders accept (bus, queue) params --- packages/blog/package.json | 1 + packages/blog/src/di/bind-dev-seed.test.ts | 9 +++++---- packages/blog/src/di/bind-dev-seed.ts | 13 ++++++++++++- packages/blog/src/di/bind-production.ts | 8 ++++++++ pnpm-lock.yaml | 3 +++ 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/blog/package.json b/packages/blog/package.json index 48490ff..b803124 100644 --- a/packages/blog/package.json +++ b/packages/blog/package.json @@ -18,6 +18,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/core-events": "workspace:*", "@repo/core-shared": "workspace:*", "@trpc/server": "^11.0.0", "inversify": "^6.2.0", diff --git a/packages/blog/src/di/bind-dev-seed.test.ts b/packages/blog/src/di/bind-dev-seed.test.ts index ec91fe6..deee1c1 100644 --- a/packages/blog/src/di/bind-dev-seed.test.ts +++ b/packages/blog/src/di/bind-dev-seed.test.ts @@ -1,6 +1,7 @@ import "reflect-metadata"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { NoopTracer, NoopLogger } from "@repo/core-shared/instrumentation"; +import { RecordingEventBus, RecordingJobQueue } from "@repo/core-testing/instrumentation"; import { bindDevSeedBlog } from "@/di/bind-dev-seed"; import { blogContainer } from "@/di/container"; import { BLOG_SYMBOLS } from "@/di/symbols"; @@ -32,7 +33,7 @@ describe("bindDevSeedBlog", () => { }); it("populates the repository with the dev articles", async () => { - await bindDevSeedBlog(tracer, logger); + await bindDevSeedBlog(tracer, logger, new RecordingEventBus(), new RecordingJobQueue()); const repo = blogContainer.get( BLOG_SYMBOLS.IArticlesRepository, @@ -43,7 +44,7 @@ describe("bindDevSeedBlog", () => { }); it("seeds the welcome article reachable by slug", async () => { - await bindDevSeedBlog(tracer, logger); + await bindDevSeedBlog(tracer, logger, new RecordingEventBus(), new RecordingJobQueue()); const repo = blogContainer.get( BLOG_SYMBOLS.IArticlesRepository, @@ -56,13 +57,13 @@ describe("bindDevSeedBlog", () => { }); it("is idempotent — calling twice rebuilds a fresh populated repo", async () => { - await bindDevSeedBlog(tracer, logger); + await bindDevSeedBlog(tracer, logger, new RecordingEventBus(), new RecordingJobQueue()); const before = blogContainer.get( BLOG_SYMBOLS.IArticlesRepository, ); const beforeCount = (await before.getArticles()).length; - await bindDevSeedBlog(tracer, logger); + await bindDevSeedBlog(tracer, logger, new RecordingEventBus(), new RecordingJobQueue()); const after = blogContainer.get( BLOG_SYMBOLS.IArticlesRepository, ); diff --git a/packages/blog/src/di/bind-dev-seed.ts b/packages/blog/src/di/bind-dev-seed.ts index f42982c..969eebe 100644 --- a/packages/blog/src/di/bind-dev-seed.ts +++ b/packages/blog/src/di/bind-dev-seed.ts @@ -5,6 +5,8 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; +import type { IEventBus } from "@repo/core-events"; +import type { IJobQueue } from "@repo/core-shared/jobs"; import { blogContainer } from "./container.js"; import { BLOG_SYMBOLS } from "./symbols.js"; import { MockArticlesRepository } from "../infrastructure/repositories/articles.repository.mock.js"; @@ -27,7 +29,12 @@ import type { IArticlesRepository } from "../application/repositories/articles.r * Idempotent: safe to call multiple times; each call rebuilds a fresh * populated repo and rebinds the symbol. */ -export async function bindDevSeedBlog(tracer: ITracer, logger: ILogger): Promise { +export async function bindDevSeedBlog( + tracer: ITracer, + logger: ILogger, + bus: IEventBus, + queue: IJobQueue, +): Promise { // Bind shared instrumentation into feature container if (blogContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { blogContainer.unbind(INSTRUMENTATION_SYMBOLS.TRACER); @@ -133,6 +140,10 @@ export async function bindDevSeedBlog(tracer: ITracer, logger: ILogger): Promise ), ), ); + // bus + queue are accept-and-forward in Phase 6; consumed by Phase 7 generator + // output at the / anchors below. + void bus; + void queue; // // } diff --git a/packages/blog/src/di/bind-production.ts b/packages/blog/src/di/bind-production.ts index f84651c..a7ed2a7 100644 --- a/packages/blog/src/di/bind-production.ts +++ b/packages/blog/src/di/bind-production.ts @@ -6,6 +6,8 @@ import { type ITracer, type ILogger, } from "@repo/core-shared/instrumentation"; +import type { IEventBus } from "@repo/core-events"; +import type { IJobQueue } from "@repo/core-shared/jobs"; import { blogContainer } from "./container"; import { BLOG_SYMBOLS } from "./symbols"; import { ArticlesRepository } from "../infrastructure/repositories/articles.repository"; @@ -20,6 +22,8 @@ export function bindProductionBlog( config: SanitizedConfig, tracer: ITracer, logger: ILogger, + bus: IEventBus, + queue: IJobQueue, ): void { // Bind shared instrumentation into feature container if (blogContainer.isBound(INSTRUMENTATION_SYMBOLS.TRACER)) { @@ -131,6 +135,10 @@ export function bindProductionBlog( ), ), ); + // bus + queue are accept-and-forward in Phase 6; consumed by Phase 7 generator + // output at the / anchors below. + void bus; + void queue; // // } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49fef34..0a3f108 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -367,6 +367,9 @@ importers: packages/blog: dependencies: + '@repo/core-events': + specifier: workspace:* + version: link:../core-events '@repo/core-shared': specifier: workspace:* version: link:../core-shared