from pydantic import BaseModel, EmailStr, Field from typing import Optional, List from enum import Enum class UserRole(str, Enum): ADMIN = "admin" USER = "user" class UserCreate(BaseModel): username: str email: EmailStr password: str class UserLogin(BaseModel): username: str password: str class UserResponse(BaseModel): id: int username: str email: str role: UserRole class Config: from_attributes = True class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): username: Optional[str] = None role: Optional[str] = None class ProductCreate(BaseModel): name: str brand: Optional[str] = None calories: float protein: float fat: float carbohydrates: float sodium: float sugar: float fiber: Optional[float] = None cholesterol: Optional[float] = None serving_size: Optional[str] = None class ProductResponse(BaseModel): id: int name: str brand: Optional[str] calories: float protein: float fat: float carbohydrates: float sodium: float sugar: float fiber: Optional[float] cholesterol: Optional[float] serving_size: Optional[str] image_path: Optional[str] = None class Config: from_attributes = True class HealthIssueCreate(BaseModel): issue_type: str = Field(..., description="Type of health issue (e.g., diabetes, hypertension, high cholesterol)") severity: Optional[str] = None notes: Optional[str] = None class HealthIssueResponse(BaseModel): id: int user_id: int issue_type: str severity: Optional[str] notes: Optional[str] class Config: from_attributes = True class NutritionAnalysisResponse(BaseModel): extracted_nutrition: dict health_rating: float = Field(..., description="Product rating from 1-10") health_recommendations: List[str] suggested_alternatives: List[ProductResponse] analysis_summary: str