1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 08:29:36 +01:00

feat(production): Produktionsschritte zum Rezept verwalten + AuthorizationPort

Erweitert das Recipe-Aggregate um ProductionStep-Child-Entities (Add/Remove)
mit vollständiger DDD-Konformität. Führt AuthorizationPort-Prüfung in allen
Production Use Cases ein (analog zum usermanagement-Referenz-BC).

Fixes: Request-Validierung (Size, Min/Max), Error-Code-Konsistenz,
Defense-in-Depth für durationMinutes und temperatureCelsius.
This commit is contained in:
Sebastian Frick 2026-02-19 17:37:18 +01:00
parent c26d72fbe7
commit cf93b847e5
27 changed files with 978 additions and 18 deletions

File diff suppressed because one or more lines are too long

View file

@ -356,6 +356,22 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/recipes/{id}/steps": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post: operations["addProductionStep"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/recipes/{id}/ingredients": {
parameters: {
query?: never;
@ -680,6 +696,22 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/recipes/{id}/steps/{stepNumber}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
delete: operations["removeProductionStep"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/recipes/{id}/ingredients/{ingredientId}": {
parameters: {
query?: never;
@ -1070,6 +1102,16 @@ export interface components {
subRecipeId?: string | null;
substitutable: boolean;
};
ProductionStepResponse: {
id: string;
/** Format: int32 */
stepNumber: number;
description: string;
/** Format: int32 */
durationMinutes?: number | null;
/** Format: int32 */
temperatureCelsius?: number | null;
};
RecipeResponse: {
id: string;
name: string;
@ -1085,11 +1127,21 @@ export interface components {
outputUom: string;
status: string;
ingredients: components["schemas"]["IngredientResponse"][];
productionSteps: components["schemas"]["ProductionStepResponse"][];
/** Format: date-time */
createdAt: string;
/** Format: date-time */
updatedAt: string;
};
AddProductionStepRequest: {
/** Format: int32 */
stepNumber?: number;
description: string;
/** Format: int32 */
durationMinutes?: number;
/** Format: int32 */
temperatureCelsius?: number;
};
AddRecipeIngredientRequest: {
/** Format: int32 */
position?: number;
@ -2076,6 +2128,32 @@ export interface operations {
};
};
};
addProductionStep: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["AddProductionStepRequest"];
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"*/*": components["schemas"]["RecipeResponse"];
};
};
};
};
addIngredient: {
parameters: {
query?: never;
@ -2672,6 +2750,27 @@ export interface operations {
};
};
};
removeProductionStep: {
parameters: {
query?: never;
header?: never;
path: {
id: string;
stepNumber: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
removeIngredient: {
parameters: {
query?: never;