Spaces:
Running
Running
File size: 3,164 Bytes
fdc2693 b938416 fdc2693 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List, Dict, Any, Optional
from datetime import datetime
from services.meal_service import MealService
from database import get_db
from pydantic import BaseModel
router = APIRouter(prefix="/api/meals", tags=["Meals"])
class MealCreate(BaseModel):
food_name: str
meal_type: str
portion_size: str
meal_date: datetime
nutrition: Dict[str, float]
image_url: Optional[str] = None
ai_analysis: Optional[Dict[str, Any]] = None
class DateRange(BaseModel):
start_date: datetime
end_date: datetime
meal_type: Optional[str] = None
@router.post("/log")
async def create_meal_log(
meal: MealCreate,
db: Session = Depends(get_db)
) -> Dict[str, Any]:
"""創建新的用餐記錄"""
meal_service = MealService(db)
try:
meal_log = meal_service.create_meal_log(
food_name=meal.food_name,
meal_type=meal.meal_type,
portion_size=meal.portion_size,
nutrition=meal.nutrition,
meal_date=meal.meal_date,
image_url=meal.image_url,
ai_analysis=meal.ai_analysis
)
return {
"success": True,
"message": "用餐記錄已創建",
"data": {
"id": meal_log.id,
"food_name": meal_log.food_name,
"meal_type": meal_log.meal_type,
"meal_date": meal_log.meal_date
}
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/list")
async def get_meal_logs(
date_range: DateRange,
db: Session = Depends(get_db)
) -> Dict[str, Any]:
"""獲取用餐記錄列表"""
meal_service = MealService(db)
try:
logs = meal_service.get_meal_logs(
start_date=date_range.start_date,
end_date=date_range.end_date,
meal_type=date_range.meal_type
)
return {
"success": True,
"data": [{
"id": log.id,
"food_name": log.food_name,
"meal_type": log.meal_type,
"portion_size": log.portion_size,
"calories": log.calories,
"protein": log.protein,
"carbs": log.carbs,
"fat": log.fat,
"meal_date": log.meal_date,
"image_url": log.image_url
} for log in logs]
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/nutrition-summary")
async def get_nutrition_summary(
date_range: DateRange,
db: Session = Depends(get_db)
) -> Dict[str, Any]:
"""獲取營養攝入總結"""
meal_service = MealService(db)
try:
summary = meal_service.get_nutrition_summary(
start_date=date_range.start_date,
end_date=date_range.end_date
)
return {
"success": True,
"data": summary
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
|