from datetime import datetime from typing import Dict, List, Optional from pgvector.sqlalchemy import Vector from sqlalchemy import Column from sqlmodel import JSON, Field, SQLModel class FoodItem(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(index=True) calories: float protein: float carbs: float fats: float micros: Dict = Field(default={}, sa_column=Column(JSON)) embedding: List[float] = Field(sa_column=Column(Vector(1536))) # OpenAI embedding size class FoodLog(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) user_id: int = Field(foreign_key="user.id") food_item_id: Optional[int] = Field(default=None, foreign_key="fooditem.id") name: str # In case no food item is linked or custom entry calories: float protein: float carbs: float fats: float image_url: Optional[str] = None timestamp: datetime = Field(default_factory=datetime.utcnow)