Implement recipe retrieval methods and enhance inventory item types for better data handling

This commit is contained in:
Nils-Johan Gynther
2026-04-09 22:16:09 +02:00
parent 29910130f0
commit bc89e3038b
3 changed files with 52 additions and 7 deletions
+31
View File
@@ -270,4 +270,35 @@ export class RecipesService {
summary,
};
}
async findAll() {
return this.prisma.recipe.findMany({
include: {
ingredients: {
include: {
product: true,
},
},
},
});
}
async findOne(id: number) {
const recipe = await this.prisma.recipe.findUnique({
where: { id },
include: {
ingredients: {
include: {
product: true,
},
},
},
});
if (!recipe) {
throw new NotFoundException(`Recipe with id ${id} not found`);
}
return recipe;
}
}
@@ -5,6 +5,13 @@ const API_BASE = process.env.NEXT_PUBLIC_API_URL_INTERNAL || 'http://recipe-api:
export async function GET(request: NextRequest) {
const id = request.nextUrl.searchParams.get('id');
if (!id) {
return NextResponse.json(
{ error: 'Missing id parameter' },
{ status: 400 }
);
}
const res = await fetch(`${API_BASE}/api/recipes/${id}/inventory-preview`, {
method: 'GET',
cache: 'no-store',
+14 -7
View File
@@ -80,11 +80,18 @@ export type RecipePreviewInventoryItem = {
id: number;
quantity: string;
unit: string;
brand?: string | null;
location?: string | null;
bestBeforeDate?: string | null;
canConvert?: boolean;
convertedQuantity?: number;
};
export type RecipePreviewMatchingInventoryItem = RecipePreviewInventoryItem & {
brand: string | null;
location: string | null;
bestBeforeDate: string | null;
};
export type RecipePreviewOtherInventoryItem = RecipePreviewInventoryItem & {
location: string | null;
canConvert: boolean;
convertedQuantity: number;
};
export type RecipeInventoryPreviewIngredient = {
@@ -96,8 +103,8 @@ export type RecipeInventoryPreviewIngredient = {
note: string | null;
availableQuantity: number;
availableUnit: string | null;
matchingInventoryItems: RecipePreviewInventoryItem[];
otherInventoryItems: RecipePreviewInventoryItem[];
matchingInventoryItems: RecipePreviewMatchingInventoryItem[];
otherInventoryItems: RecipePreviewOtherInventoryItem[];
status: 'enough' | 'missing' | 'unit_mismatch';
missingQuantity: number;
};