40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
import axios from 'axios';
|
|
|
|
const OPENFOODFACTS_API = 'https://world.openfoodfacts.org/cgi/search.pl';
|
|
|
|
export default function setupRoutes(app) {
|
|
app.get('/api/foods/search', async (req, res) => {
|
|
const { q } = req.query;
|
|
|
|
if (!q) {
|
|
return res.json([]);
|
|
}
|
|
|
|
try {
|
|
const response = await axios.get(OPENFOODFACTS_API, {
|
|
params: {
|
|
search_terms: q,
|
|
search_simple: 1,
|
|
action: 'process',
|
|
json: 1,
|
|
page_size: 10
|
|
}
|
|
});
|
|
|
|
const products = response.data.products || [];
|
|
const foods = products.map(p => ({
|
|
name: p.product_name || p.product_name_en || 'Unknown',
|
|
calories: p.nutriments?.['energy-kcal_100g'] || 0,
|
|
protein: p.nutriments?.proteins_100g || 0,
|
|
carbs: p.nutriments?.carbohydrates_100g || 0,
|
|
fat: p.nutriments?.fat_100g || 0
|
|
})).filter(f => f.name !== 'Unknown' && f.calories > 0);
|
|
|
|
res.json(foods);
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(503).json({ error: 'Food search unavailable' });
|
|
}
|
|
});
|
|
}
|