mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-09 11:55:18 -05:00
Merge branch 'mealie-next' into fix/make-mealie-alpha-migrations-more-fault-tolerant
This commit is contained in:
@@ -35,12 +35,10 @@ class Group(SqlAlchemyBase, BaseMixins):
|
||||
name: Mapped[str] = mapped_column(sa.String, index=True, nullable=False, unique=True)
|
||||
slug: Mapped[str | None] = mapped_column(sa.String, index=True, unique=True)
|
||||
users: Mapped[list["User"]] = orm.relationship("User", back_populates="group")
|
||||
categories: Mapped[Category] = orm.relationship(
|
||||
Category, secondary=group_to_categories, single_parent=True, uselist=True
|
||||
)
|
||||
categories: Mapped[list[Category]] = orm.relationship(Category, secondary=group_to_categories, single_parent=True)
|
||||
|
||||
invite_tokens: Mapped[list[GroupInviteToken]] = orm.relationship(
|
||||
GroupInviteToken, back_populates="group", cascade="all, delete-orphan", uselist=True
|
||||
GroupInviteToken, back_populates="group", cascade="all, delete-orphan"
|
||||
)
|
||||
preferences: Mapped[GroupPreferencesModel] = orm.relationship(
|
||||
GroupPreferencesModel,
|
||||
@@ -51,7 +49,7 @@ class Group(SqlAlchemyBase, BaseMixins):
|
||||
)
|
||||
|
||||
# Recipes
|
||||
recipes: Mapped[list["RecipeModel"]] = orm.relationship("RecipeModel", back_populates="group", uselist=True)
|
||||
recipes: Mapped[list["RecipeModel"]] = orm.relationship("RecipeModel", back_populates="group")
|
||||
|
||||
# CRUD From Others
|
||||
common_args = {
|
||||
|
||||
@@ -30,8 +30,8 @@ class GroupMealPlanRules(BaseMixins, SqlAlchemyBase):
|
||||
String, nullable=False, default=""
|
||||
) # "breakfast", "lunch", "dinner", "side"
|
||||
|
||||
categories: Mapped[Category] = orm.relationship(Category, secondary=plan_rules_to_categories, uselist=True)
|
||||
tags: Mapped[list[Tag]] = orm.relationship(Tag, secondary=plan_rules_to_tags, uselist=True)
|
||||
categories: Mapped[list[Category]] = orm.relationship(Category, secondary=plan_rules_to_categories)
|
||||
tags: Mapped[list[Tag]] = orm.relationship(Tag, secondary=plan_rules_to_tags)
|
||||
|
||||
@auto_init()
|
||||
def __init__(self, **_) -> None:
|
||||
|
||||
@@ -124,14 +124,14 @@ class ShoppingList(SqlAlchemyBase, BaseMixins):
|
||||
group: Mapped["Group"] = orm.relationship("Group", back_populates="shopping_lists")
|
||||
|
||||
name: Mapped[str | None] = mapped_column(String)
|
||||
list_items: Mapped[ShoppingListItem] = orm.relationship(
|
||||
list_items: Mapped[list[ShoppingListItem]] = orm.relationship(
|
||||
ShoppingListItem,
|
||||
cascade="all, delete, delete-orphan",
|
||||
order_by="ShoppingListItem.position",
|
||||
collection_class=ordering_list("position"),
|
||||
)
|
||||
|
||||
recipe_references: Mapped[ShoppingListRecipeReference] = orm.relationship(
|
||||
recipe_references: Mapped[list[ShoppingListRecipeReference]] = orm.relationship(
|
||||
ShoppingListRecipeReference, cascade="all, delete, delete-orphan"
|
||||
)
|
||||
label_settings: Mapped[list["ShoppingListMultiPurposeLabel"]] = orm.relationship(
|
||||
|
||||
@@ -49,7 +49,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
|
||||
user_id: Mapped[GUID | None] = mapped_column(GUID, sa.ForeignKey("users.id", use_alter=True), index=True)
|
||||
user: Mapped["User"] = orm.relationship("User", uselist=False, foreign_keys=[user_id])
|
||||
|
||||
meal_entries: Mapped["GroupMealPlan"] = orm.relationship(
|
||||
meal_entries: Mapped[list["GroupMealPlan"]] = orm.relationship(
|
||||
"GroupMealPlan", back_populates="recipe", cascade="all, delete-orphan"
|
||||
)
|
||||
|
||||
@@ -72,7 +72,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
|
||||
recipe_yield: Mapped[str | None] = mapped_column(sa.String)
|
||||
recipeCuisine: Mapped[str | None] = mapped_column(sa.String)
|
||||
|
||||
assets: Mapped[RecipeAsset] = orm.relationship("RecipeAsset", cascade="all, delete-orphan")
|
||||
assets: Mapped[list[RecipeAsset]] = orm.relationship("RecipeAsset", cascade="all, delete-orphan")
|
||||
nutrition: Mapped[Nutrition] = orm.relationship("Nutrition", uselist=False, cascade="all, delete-orphan")
|
||||
recipe_category: Mapped[list["Category"]] = orm.relationship(
|
||||
"Category", secondary=recipes_to_categories, back_populates="recipes"
|
||||
|
||||
@@ -225,10 +225,14 @@ class ShoppingListUpdate(ShoppingListSave):
|
||||
|
||||
|
||||
class ShoppingListOut(ShoppingListUpdate):
|
||||
recipe_references: list[ShoppingListRecipeRefOut]
|
||||
label_settings: list[ShoppingListMultiPurposeLabelOut]
|
||||
recipe_references: list[ShoppingListRecipeRefOut] = []
|
||||
label_settings: list[ShoppingListMultiPurposeLabelOut] = []
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@field_validator("recipe_references", "label_settings", mode="before")
|
||||
def default_none_to_empty_list(cls, v):
|
||||
return v or []
|
||||
|
||||
@classmethod
|
||||
def loader_options(cls) -> list[LoaderOption]:
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user