mirror of
https://github.com/RichieCahill/dotfiles.git
synced 2026-04-17 13:08:19 -04:00
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""Van inventory ORM models."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from sqlalchemy import ForeignKey, UniqueConstraint
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from python.orm.van_inventory.base import VanTableBase
|
|
|
|
|
|
class Item(VanTableBase):
|
|
"""A food item in the van."""
|
|
|
|
__tablename__ = "items"
|
|
|
|
name: Mapped[str] = mapped_column(unique=True)
|
|
quantity: Mapped[float] = mapped_column(default=0)
|
|
unit: Mapped[str]
|
|
category: Mapped[str | None]
|
|
|
|
meal_ingredients: Mapped[list[MealIngredient]] = relationship(back_populates="item")
|
|
|
|
|
|
class Meal(VanTableBase):
|
|
"""A meal that can be made from items in the van."""
|
|
|
|
__tablename__ = "meals"
|
|
|
|
name: Mapped[str] = mapped_column(unique=True)
|
|
instructions: Mapped[str | None]
|
|
|
|
ingredients: Mapped[list[MealIngredient]] = relationship(back_populates="meal")
|
|
|
|
|
|
class MealIngredient(VanTableBase):
|
|
"""Links a meal to the items it requires, with quantities."""
|
|
|
|
__tablename__ = "meal_ingredients"
|
|
__table_args__ = (UniqueConstraint("meal_id", "item_id"),)
|
|
|
|
meal_id: Mapped[int] = mapped_column(ForeignKey("meals.id"))
|
|
item_id: Mapped[int] = mapped_column(ForeignKey("items.id"))
|
|
quantity_needed: Mapped[float]
|
|
|
|
meal: Mapped[Meal] = relationship(back_populates="ingredients")
|
|
item: Mapped[Item] = relationship(back_populates="meal_ingredients")
|