from pydantic import BaseModel from typing import Optional, List, Any, Dict from datetime import datetime class ScanRequest(BaseModel): barcode: str class IngredientAnalysis(BaseModel): name: str popular_name: Optional[str] = None explanation: str classification: str reason: str class RecipeInfo(BaseModel): title: Optional[str] = None description: Optional[str] = None prep_time: Optional[str] = None calories: Optional[str] = None ingredients_list: Optional[List[str]] = None steps: Optional[List[str]] = None tip: Optional[str] = None class ScanResult(BaseModel): barcode: str product_name: Optional[str] = None brand: Optional[str] = None category: Optional[str] = None image_url: Optional[str] = None score: int summary: str positives: List[str] negatives: List[str] ingredients: List[IngredientAnalysis] nutrition: Optional[Dict[str, Any]] = None nutrition_verdict: Optional[str] = None recipe: Optional[RecipeInfo] = None nutri_score: Optional[str] = None nova_group: Optional[int] = None source: str = "open_food_facts" class ScanHistoryItem(BaseModel): id: int barcode: str product_name: Optional[str] = None brand: Optional[str] = None score: int scanned_at: datetime