🎯 目標
建立 food_compounds 對照表,打通「食物 ↔ 成分」
/api/recommendations 回傳時,能附帶「此食物涉及的成分可能與哪些藥物有交互作用」
讓 API 在建議清單中直接帶簡單的警示資訊(例如:某食物與抗凝血藥交互 → 顯示「⚠ 可能影響抗凝血」)
🛠 工作項目
1. 資料庫設計
新表:food_compounds
意義:
foods:番茄
compounds:番茄紅素
food_compounds:番茄含有番茄紅素(來源:PubMed/USDA/DrugBank cross-ref)
2. ETL 任務
準備 etl/food_compounds_min.csv(少量資料即可跑通:黑芝麻→銅、番茄→番茄紅素、鮭魚→Omega-3 等)
腳本 import_food_compounds.sh:
INSERT IGNORE compounds(name)
JOIN food name → 插入 food_compounds
3. DAO / RowMapper
FoodCompoundDao.findCompoundsByFoodId(foodId) → 回 List<CompoundDto>
InteractionDao.findByCompoundId(compoundId) → 已有(Day 9)
4. RecommendationService 整合
Day 6 已有:RuleScoringStrategy 算分
Day 10 加強:
查 food_id → 找 food_compounds → 找 interactions
將「是否有交互」附加到 RecommendationItem,例如:
5. RecommendationResponse DTO 改造
RecommendationItem 新增欄位:
List<InteractionSummary> interactions
InteractionSummary(輕量版 DTO):
6. 驗收 API
/api/recommendations?effectId=E002 →
回傳食物清單,部分食物帶 interactions(至少 1 筆)
/api/interactions?food=番茄 → 能查出對應藥物交互
/api/effects → 不受影響,仍正常
✅ 驗收清單
food_compounds 成功建表 & 匯入
curl "http://localhost:8081/api/recommendations?effectId=E002"
番茄項目下方應出現 interactions 陣列
curl "http://localhost:8081/api/interactions?food=番茄"
能查出同樣的交互資料(和 Day 9 一致)
📦 交付物
db/schema_day10.sql:新增 food_compounds
etl/food_compounds_min.csv、etl/import_food_compounds.sh
dto/InteractionSummary.java
dao/FoodCompoundDao.java + impl + FoodCompoundRowMapper.java
service/RecommendationService.java 改造 → 整合交互
README_DAY10.md:說明如何導入、測試、範例輸出