🎯 目標
打通從 DrugBank(授權帳號下載的資料)→ 本機 DB → API 查詢 的最短路徑
新增 /api/interactions 查詢端點(依營養成分/食物 → 可能的藥物交互與嚴重度)
🛠 工作項目
1) 資料與結構(DB)
既有表:effects / foods / evidence(不動)
使用 Day 3 已建的表:compounds、interactions
compounds(name):先只放關鍵活性成分(例:番茄紅素、維生素C、Omega-3、銅…)
interactions(compound_id, drugbank_drug_id, interaction_type, mechanism, severity, evidence_level, pmid_or_doi, notes)
索引:
CREATE INDEX idx_compounds_name ON compounds(name);
CREATE INDEX idx_interactions_compound ON interactions(compound_id);
CREATE INDEX idx_interactions_drugbank ON interactions(drugbank_drug_id);
2) 最小 ETL(一次性導入)
準備 etl/drugbank_min.csv(欄位:compound_name, drugbank_drug_id, interaction_type, mechanism, severity, evidence_level, pmid_or_doi)
腳本 import_drugbank_min.sh:
INSERT IGNORE INTO compounds(name)(去重)
INSERT ... SELECT 用 JOIN compounds.name = csv.compound_name 寫入 interactions
先導入少量高關聯成分(與 E001/E002 相關者),確保端到端打通
3) 後端程式
dao/InteractionDao.java:
List<InteractionDto> findByCompoundName(String compoundName)
List<InteractionDto> findByFoodName(String foodName)(可選:foods → (食物對應成分) → interactions,Day 8 先用手動對應表或暫定規則)
dto/InteractionDto:
controller/InteractionController:
GET /api/interactions?compound=番茄紅素
(可選)GET /api/interactions?food=番茄 → 以簡單 mapping 找到對應成分
基本驗證與 404:compound/food 不存在回一致錯誤格式(沿用 Day 6 的 @ControllerAdvice)
4) 權限與安全(最小做法)
DrugBank 檔案不進 repo,只放到 ~/mywork/data/drugbank/
.gitignore 已忽略資料檔
連線密碼仍用本機 mall/mallpass,不對外開放