refactor(media): migrate binders to wireUseCase for all 3 use cases
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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<void> {
|
||||
.bind<IMediaRepository>(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(
|
||||
});
|
||||
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(
|
||||
});
|
||||
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,
|
||||
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)
|
||||
|
||||
@@ -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(
|
||||
});
|
||||
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(
|
||||
});
|
||||
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);
|
||||
});
|
||||
|
||||
// Controllers — wrapped with span at bind time
|
||||
for (const sym of [
|
||||
|
||||
Reference in New Issue
Block a user