fix(dashboard): filter todayMeals by visible_meal_types preference (#14)

The dashboard meal widget was showing all meal types regardless of the
household meal visibility settings configured in Settings > Meal Plan.

Root cause: the todayMeals SQL query in dashboard.js did not read
visible_meal_types from sync_config. The Meals page applied this filter
client-side, but the dashboard API returned unfiltered data.

Fix: read visible_meal_types from sync_config before the query and inject
the active types as IN (?) placeholders. Falls back to all four types when
no preference is stored.
This commit is contained in:
Ulas
2026-04-05 03:12:01 +02:00
parent 0940afc170
commit 212a8bdb0a
3 changed files with 15 additions and 3 deletions
+9 -2
View File
@@ -80,11 +80,18 @@ router.get('/', (req, res) => {
result.urgentTasks = [];
}
// Heutiges Essen
// Heutiges Essen (gefiltert nach haushaltweiten Mahlzeit-Typ-Einstellungen)
try {
const ALL_MEAL_TYPES = ['breakfast', 'lunch', 'dinner', 'snack'];
const prefRow = d.prepare('SELECT value FROM sync_config WHERE key = ?').get('visible_meal_types');
const visibleTypes = prefRow
? prefRow.value.split(',').filter((t) => ALL_MEAL_TYPES.includes(t))
: ALL_MEAL_TYPES;
const placeholders = visibleTypes.map(() => '?').join(', ');
result.todayMeals = d.prepare(`
SELECT * FROM meals
WHERE date = ?
AND meal_type IN (${placeholders})
ORDER BY
CASE meal_type
WHEN 'breakfast' THEN 0
@@ -92,7 +99,7 @@ router.get('/', (req, res) => {
WHEN 'dinner' THEN 2
WHEN 'snack' THEN 3
END
`).all(todayStr);
`).all(todayStr, ...visibleTypes);
} catch (err) {
log.error('todayMeals-Fehler:', err.message);
result.todayMeals = [];