/** Recipes resource – Production BC. */ import type { AxiosInstance } from 'axios'; import type { RecipeDTO, RecipeSummaryDTO, IngredientDTO, ProductionStepDTO, CreateRecipeRequest, AddRecipeIngredientRequest, AddProductionStepRequest, } from '@effigenix/types'; export type RecipeType = 'RAW_MATERIAL' | 'INTERMEDIATE' | 'FINISHED_PRODUCT'; export type RecipeStatus = 'DRAFT' | 'ACTIVE' | 'ARCHIVED'; export const RECIPE_TYPE_LABELS: Record = { RAW_MATERIAL: 'Rohstoff', INTERMEDIATE: 'Halbfabrikat', FINISHED_PRODUCT: 'Fertigprodukt', }; export type { RecipeDTO, RecipeSummaryDTO, IngredientDTO, ProductionStepDTO, CreateRecipeRequest, AddRecipeIngredientRequest, AddProductionStepRequest, }; // ── Resource factory ───────────────────────────────────────────────────────── const BASE = '/api/recipes'; export function createRecipesResource(client: AxiosInstance) { return { async list(status?: RecipeStatus): Promise { const params: Record = {}; if (status) params['status'] = status; const res = await client.get(BASE, { params }); return res.data; }, async getById(id: string): Promise { const res = await client.get(`${BASE}/${id}`); return res.data; }, async create(request: CreateRecipeRequest): Promise { const res = await client.post(BASE, request); return res.data; }, async addIngredient(id: string, request: AddRecipeIngredientRequest): Promise { const res = await client.post(`${BASE}/${id}/ingredients`, request); return res.data; }, async removeIngredient(recipeId: string, ingredientId: string): Promise { await client.delete(`${BASE}/${recipeId}/ingredients/${ingredientId}`); }, async addProductionStep(id: string, request: AddProductionStepRequest): Promise { const res = await client.post(`${BASE}/${id}/steps`, request); return res.data; }, async removeProductionStep(id: string, stepNumber: number): Promise { await client.delete(`${BASE}/${id}/steps/${stepNumber}`); }, async activateRecipe(id: string): Promise { const res = await client.post(`${BASE}/${id}/activate`); return res.data; }, async archiveRecipe(id: string): Promise { const res = await client.post(`${BASE}/${id}/archive`); return res.data; }, }; } export type RecipesResource = ReturnType;