Files
2026-07-28 15:00:00 +02:00

77 lines
2.2 KiB
Python

from datetime import datetime, timezone
from enum import Enum
from typing import Optional
from sqlmodel import Field, SQLModel
class MealType(str, Enum):
breakfast = "breakfast"
lunch = "lunch"
dinner = "dinner"
snack = "snack"
class User(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
username: str = Field(unique=True, index=True)
hashed_password: str
calorie_goal: float = 2000
protein_goal: float = 100
carbs_goal: float = 250
fat_goal: float = 70
class Product(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
barcode: str = Field(unique=True, index=True)
name: str
calories: float
carbs: float
protein: float
fat: float
sugar: float = 0.0
fiber: float = 0.0
saturated_fat: float = 0.0
salt: float = 0.0
class FoodLog(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(foreign_key="user.id", index=True)
barcode: Optional[str] = Field(default=None, index=True)
name: str
meal_type: MealType = MealType.snack
amount_g: float
calories: float
carbs: float
protein: float
fat: float
sugar: float = 0.0
fiber: float = 0.0
saturated_fat: float = 0.0
salt: float = 0.0
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class Dish(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(foreign_key="user.id", index=True)
product_barcode: str = Field(foreign_key="product.barcode", unique=True, index=True)
name: str
instructions: Optional[str] = None
total_weight_g: float
class DishIngredient(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
dish_id: int = Field(foreign_key="dish.id", index=True)
product_barcode: str = Field(foreign_key="product.barcode")
amount_g: float
class DishShare(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
dish_id: int = Field(foreign_key="dish.id", index=True)
shared_with_user_id: int = Field(foreign_key="user.id", index=True)