feat(media): conformance manifest + self-asserting bind-production

This commit is contained in:
2026-05-13 00:09:36 +02:00
parent 9bbc068498
commit dc7aafb97f
3 changed files with 33 additions and 0 deletions

View File

@@ -6,8 +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 { mediaContainer } from "./container";
import { MEDIA_SYMBOLS } from "./symbols";
import { mediaManifest } from "../feature.manifest";
import { MediaRepository } from "../infrastructure/repositories/media.repository";
import { getMediaUseCase } from "../application/use-cases/get-media.use-case";
import { listMediaUseCase } from "../application/use-cases/list-media.use-case";
@@ -134,4 +136,16 @@ export function bindProductionMedia(ctx: BindProductionContext): void {
// <gen:event-handlers>
// <gen:jobs>
// <gen:realtime-handlers>
// Boot-time conformance check.
assertFeatureConformance(
mediaContainer,
mediaManifest,
{
getMedia: MEDIA_SYMBOLS.IGetMediaUseCase,
listMedia: MEDIA_SYMBOLS.IListMediaUseCase,
deleteMedia: MEDIA_SYMBOLS.IDeleteMediaUseCase,
},
ctx,
);
}

View File

@@ -0,0 +1,18 @@
import { defineFeature } from "@repo/core-shared/conformance";
/**
* The media feature's conformance manifest.
*/
export const mediaManifest = defineFeature({
name: "media",
requiredCores: [],
useCases: {
getMedia: { mutates: false, audits: [], publishes: [], consumes: [] },
listMedia: { mutates: false, audits: [], publishes: [], consumes: [] },
deleteMedia: { mutates: true, audits: [], publishes: [], consumes: [] },
},
realtimeChannels: [],
jobs: [],
} as const);
export type MediaManifest = typeof mediaManifest;

View File

@@ -31,3 +31,4 @@ export type { IDeleteMediaController } from "./interface-adapters/controllers/de
// <gen:events>
// <gen:realtime-channels>
export { mediaManifest, type MediaManifest } from "./feature.manifest";