diff --git a/coverage/summary.json b/coverage/summary.json index 6094ac2..c3ab91d 100644 --- a/coverage/summary.json +++ b/coverage/summary.json @@ -1,16 +1,16 @@ { - "generatedAt": "2026-05-13T17:51:01.137Z", - "commit": "e08e0a1", + "generatedAt": "2026-05-13T17:59:49.208Z", + "commit": "0867efb", "repo": { "statements": 95.86, - "branches": 88.91, + "branches": 88.93, "functions": 100, "lines": 95.86, "counts": { - "lf": 3117, - "lh": 2988, - "brf": 487, - "brh": 433, + "lf": 3115, + "lh": 2986, + "brf": 488, + "brh": 434, "fnf": 142, "fnh": 142 } @@ -31,13 +31,13 @@ } }, "@repo/blog": { - "statements": 96.39, + "statements": 96.36, "branches": 88.65, "functions": 100, - "lines": 96.39, + "lines": 96.36, "counts": { - "lf": 747, - "lh": 720, + "lf": 741, + "lh": 714, "brf": 141, "brh": 125, "fnf": 29, @@ -59,15 +59,15 @@ } }, "@repo/media": { - "statements": 97.13, - "branches": 90.53, + "statements": 97.15, + "branches": 90.63, "functions": 100, - "lines": 97.13, + "lines": 97.15, "counts": { - "lf": 557, - "lh": 541, - "brf": 95, - "brh": 86, + "lf": 561, + "lh": 545, + "brf": 96, + "brh": 87, "fnf": 24, "fnh": 24 } diff --git a/packages/media/src/di/bind-dev-seed.ts b/packages/media/src/di/bind-dev-seed.ts index dd58cae..0a6d8f9 100644 --- a/packages/media/src/di/bind-dev-seed.ts +++ b/packages/media/src/di/bind-dev-seed.ts @@ -6,7 +6,10 @@ import { type ILogger, } from "@repo/core-shared/instrumentation"; import type { BindContext } from "@repo/core-shared/di"; -import { assertFeatureConformance } from "@repo/core-shared/conformance"; +import { + assertFeatureConformance, + wireUseCase, +} from "@repo/core-shared/conformance"; import { mediaManifest } from "../feature.manifest.js"; import { mediaContainer } from "./container.js"; import { MEDIA_SYMBOLS } from "./symbols.js"; @@ -60,54 +63,48 @@ export async function bindDevSeedMedia(ctx: BindContext): Promise { .bind(MEDIA_SYMBOLS.IMediaRepository) .toConstantValue(repo); - // Wrap use cases + controllers identically to bind-production - const wrappedGetMedia = withSpan( + // Use cases + const wrappedGetMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IGetMediaUseCase, + factory: getMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "getMedia", tracer, - { name: "media.getMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.getMedia" }, - getMediaUseCase(repo), - ), - ); - const wrappedListMedia = withSpan( + logger, + }); + const wrappedListMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IListMediaUseCase, + factory: listMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "listMedia", tracer, - { name: "media.listMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.listMedia" }, - listMediaUseCase(repo), - ), - ); - const wrappedDeleteMedia = withSpan( + logger, + }); + const wrappedDeleteMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IDeleteMediaUseCase, + factory: deleteMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "deleteMedia", tracer, - { name: "media.deleteMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.deleteMedia" }, - deleteMediaUseCase(repo), - ), - ); + logger, + }); for (const sym of [ - MEDIA_SYMBOLS.IGetMediaUseCase, - MEDIA_SYMBOLS.IListMediaUseCase, - MEDIA_SYMBOLS.IDeleteMediaUseCase, MEDIA_SYMBOLS.IGetMediaController, MEDIA_SYMBOLS.IListMediaController, MEDIA_SYMBOLS.IDeleteMediaController, ]) { if (mediaContainer.isBound(sym)) mediaContainer.unbind(sym); } - mediaContainer - .bind(MEDIA_SYMBOLS.IGetMediaUseCase) - .toConstantValue(wrappedGetMedia); - mediaContainer - .bind(MEDIA_SYMBOLS.IListMediaUseCase) - .toConstantValue(wrappedListMedia); - mediaContainer - .bind(MEDIA_SYMBOLS.IDeleteMediaUseCase) - .toConstantValue(wrappedDeleteMedia); mediaContainer .bind(MEDIA_SYMBOLS.IGetMediaController) diff --git a/packages/media/src/di/bind-production.ts b/packages/media/src/di/bind-production.ts index f1c2030..84e56a2 100644 --- a/packages/media/src/di/bind-production.ts +++ b/packages/media/src/di/bind-production.ts @@ -6,7 +6,10 @@ import { type ILogger, } from "@repo/core-shared/instrumentation"; import type { BindProductionContext } from "@repo/core-shared/di"; -import { assertFeatureConformance } from "@repo/core-shared/conformance"; +import { + assertFeatureConformance, + wireUseCase, +} from "@repo/core-shared/conformance"; import { mediaContainer } from "./container"; import { MEDIA_SYMBOLS } from "./symbols"; import { mediaManifest } from "../feature.manifest"; @@ -43,51 +46,40 @@ export function bindProductionMedia(ctx: BindProductionContext): void { const repo = new MediaRepository(config, tracer, logger); mediaContainer.bind(MEDIA_SYMBOLS.IMediaRepository).toConstantValue(repo); - // Use cases — wrapped with span + capture at bind time - const wrappedGetMedia = withSpan( + // Use cases + const wrappedGetMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IGetMediaUseCase, + factory: getMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "getMedia", tracer, - { name: "media.getMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.getMedia" }, - getMediaUseCase(repo), - ), - ); - const wrappedListMedia = withSpan( + logger, + }); + const wrappedListMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IListMediaUseCase, + factory: listMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "listMedia", tracer, - { name: "media.listMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.listMedia" }, - listMediaUseCase(repo), - ), - ); - const wrappedDeleteMedia = withSpan( + logger, + }); + const wrappedDeleteMedia = wireUseCase({ + container: mediaContainer, + symbol: MEDIA_SYMBOLS.IDeleteMediaUseCase, + factory: deleteMediaUseCase, + deps: [repo], + feature: "media", + layer: "use-case", + name: "deleteMedia", tracer, - { name: "media.deleteMedia", op: "use-case" }, - withCapture( - logger, - { feature: "media", layer: "use-case", name: "media.deleteMedia" }, - deleteMediaUseCase(repo), - ), - ); - - for (const sym of [ - MEDIA_SYMBOLS.IGetMediaUseCase, - MEDIA_SYMBOLS.IListMediaUseCase, - MEDIA_SYMBOLS.IDeleteMediaUseCase, - ]) { - if (mediaContainer.isBound(sym)) mediaContainer.unbind(sym); - } - mediaContainer - .bind(MEDIA_SYMBOLS.IGetMediaUseCase) - .toConstantValue(wrappedGetMedia); - mediaContainer - .bind(MEDIA_SYMBOLS.IListMediaUseCase) - .toConstantValue(wrappedListMedia); - mediaContainer - .bind(MEDIA_SYMBOLS.IDeleteMediaUseCase) - .toConstantValue(wrappedDeleteMedia); + logger, + }); // Controllers — wrapped with span at bind time for (const sym of [