Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user