feat: add context-aware meal fit engine
This commit is contained in:
@@ -9,6 +9,7 @@ import crypto from 'node:crypto';
|
||||
import * as db from '../db.js';
|
||||
import { createLogger } from '../logger.js';
|
||||
import { str, num, date, oneOf, collectErrors, MAX_TITLE, MAX_TEXT, MAX_SHORT } from '../middleware/validate.js';
|
||||
import { generateGroceryList, scoreMealSuggestions } from '../services/meal-fit.js';
|
||||
|
||||
const log = createLogger('MealPlanning');
|
||||
const router = express.Router();
|
||||
@@ -254,6 +255,28 @@ router.put('/cook-assignments/:mealId', (req, res) => {
|
||||
} catch (err) { handleError(res, err, 'PUT /cook-assignments/:mealId'); }
|
||||
});
|
||||
|
||||
router.post('/suggestions', (req, res) => {
|
||||
try {
|
||||
const meals = Array.isArray(req.body?.meals) ? req.body.meals : [];
|
||||
const selectedMeals = Array.isArray(req.body?.selectedMeals) ? req.body.selectedMeals : [];
|
||||
const context = {
|
||||
meals,
|
||||
dayContext: req.body?.dayContext || req.body?.day_context || {},
|
||||
preferences: Array.isArray(req.body?.preferences) ? req.body.preferences : [],
|
||||
inventory: Array.isArray(req.body?.inventory) ? req.body.inventory : [],
|
||||
recentMeals: Array.isArray(req.body?.recentMeals) ? req.body.recentMeals : [],
|
||||
pantryStaples: Array.isArray(req.body?.pantryStaples) ? req.body.pantryStaples : [],
|
||||
today: req.body?.today,
|
||||
};
|
||||
if (!meals.length) return res.status(400).json({ error: 'At least one meal is required.', code: 400 });
|
||||
const suggestions = scoreMealSuggestions(context);
|
||||
const groceryList = selectedMeals.length
|
||||
? generateGroceryList(selectedMeals, { inventory: context.inventory, pantryStaples: context.pantryStaples })
|
||||
: null;
|
||||
res.json({ data: { suggestions, groceryList } });
|
||||
} catch (err) { handleError(res, err, 'POST /suggestions'); }
|
||||
});
|
||||
|
||||
router.get('/feedback', (req, res) => {
|
||||
try {
|
||||
const limit = Math.max(1, Math.min(200, Number(req.query.limit || 50)));
|
||||
|
||||
Reference in New Issue
Block a user