From 4a63c5cb67aaf3e8c937d7dac351d6a607a8cb78 Mon Sep 17 00:00:00 2001 From: "Sven (AAMOS AI)" Date: Tue, 11 Aug 2026 07:28:25 +0700 Subject: [PATCH] =?UTF-8?q?cleanup(memory):=20impact=20l=C3=A4ser=20bara?= =?UTF-8?q?=20egen=20userPreferences-rad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/api/src/lib/memoryImpact.ts | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/api/src/lib/memoryImpact.ts b/apps/api/src/lib/memoryImpact.ts index bf441b3..d06a0f1 100644 --- a/apps/api/src/lib/memoryImpact.ts +++ b/apps/api/src/lib/memoryImpact.ts @@ -132,15 +132,30 @@ export async function computeMemoryImpact(options: MemoryImpactOptions): Promise .where(eq(schema.householdMembers.householdId, householdId)) : []; const memberIds = members.length ? members.map((m) => m.userId) : [userId]; - const allPrefs = await db + + // Läs bara den anropande användarens fulla preferensrad; personliga data från + // andra hushållsmedlemmar läcker aldrig in i impact-beräkningen. + const myPrefs = await db .select() .from(schema.userPreferences) + .where(eq(schema.userPreferences.userId, userId)) + .limit(1) + .then((rows) => rows[0]); + + // För säkerhetsfiltrering behöver vi endast de begränsande fälten från alla + // medlemmar — inte deras personliga preferenser. + const householdRestrictionRows = await db + .select({ + allergens: schema.userPreferences.allergens, + avoidIngredientIds: schema.userPreferences.avoidIngredientIds, + spiceLevelMax: schema.userPreferences.spiceLevelMax, + }) + .from(schema.userPreferences) .where(inArray(schema.userPreferences.userId, memberIds)); - const combinedAllergens = [...new Set(allPrefs.flatMap((p) => p.allergens))]; - const combinedAvoid = [...new Set(allPrefs.flatMap((p) => p.avoidIngredientIds))]; - const strictestSpice = Math.min(...allPrefs.map((p) => p.spiceLevelMax), 5); - const myPrefs = allPrefs.find((p) => p.userId === userId); + const combinedAllergens = [...new Set(householdRestrictionRows.flatMap((p) => p.allergens))]; + const combinedAvoid = [...new Set(householdRestrictionRows.flatMap((p) => p.avoidIngredientIds))]; + const strictestSpice = Math.min(...householdRestrictionRows.map((p) => p.spiceLevelMax), 5); // --- 3. Kandidater --- const candidates = await db