64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
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 = "warning"
|
|
reason: str = ""
|
|
is_allergen: Optional[bool] = False
|
|
|
|
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 SubstitutionItem(BaseModel):
|
|
name: str
|
|
brand: Optional[str] = None
|
|
reason: str = ""
|
|
estimated_score: Optional[int] = None
|
|
|
|
class AllergenAlert(BaseModel):
|
|
ingredient: str
|
|
allergy: str
|
|
|
|
class ScanResult(BaseModel):
|
|
id: Optional[int] = None
|
|
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[Any] # Allow flexible ingredient format
|
|
nutrition: Optional[Dict[str, Any]] = None
|
|
nutrition_verdict: Optional[str] = None
|
|
recipe: Optional[Any] = None
|
|
nutri_score: Optional[str] = None
|
|
nova_group: Optional[int] = None
|
|
substitutions: Optional[List[Any]] = None
|
|
allergen_alerts: Optional[List[Any]] = None
|
|
new_badges: Optional[List[str]] = 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
|