c8c02036a3
* capture #1043 * update file format
920 lines
40 KiB
Python
920 lines
40 KiB
Python
"""Initial tables
|
|
|
|
Revision ID: 6b0f5f32d602
|
|
Revises:
|
|
Create Date: 2022-02-21 19:56:24.351115
|
|
|
|
"""
|
|
import sqlalchemy as sa
|
|
from sqlalchemy import engine_from_config
|
|
|
|
import mealie.db.migration_types
|
|
from alembic import op
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = "6b0f5f32d602"
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
# Adapted from https://improveandrepeat.com/2021/09/python-friday-87-handling-pre-existing-tables-with-alembic-and-sqlalchemy/
|
|
def table_exists(table, schema=None):
|
|
config = op.get_context().config
|
|
engine = engine_from_config(config.get_section(config.config_ini_section), prefix="sqlalchemy.")
|
|
insp = sa.inspect(engine)
|
|
return insp.has_table(table, schema)
|
|
|
|
|
|
def upgrade():
|
|
# Only create initial tables if they don't exist yet, to ease transition from pre-alembic state
|
|
if table_exists("users"):
|
|
return
|
|
|
|
op.create_table(
|
|
"groups",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_groups_name"), "groups", ["name"], unique=True)
|
|
op.create_table(
|
|
"categories",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("slug", sa.String(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("slug", "group_id", name="category_slug_group_id_key"),
|
|
)
|
|
op.create_index(op.f("ix_categories_group_id"), "categories", ["group_id"], unique=False)
|
|
op.create_index(op.f("ix_categories_name"), "categories", ["name"], unique=False)
|
|
op.create_index(op.f("ix_categories_slug"), "categories", ["slug"], unique=False)
|
|
op.create_table(
|
|
"cookbooks",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("position", sa.Integer(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("slug", sa.String(), nullable=False),
|
|
sa.Column("description", sa.String(), nullable=True),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"group_data_exports",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("filename", sa.String(), nullable=False),
|
|
sa.Column("path", sa.String(), nullable=False),
|
|
sa.Column("size", sa.String(), nullable=False),
|
|
sa.Column("expires", sa.String(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_group_data_exports_group_id"), "group_data_exports", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"group_events_notifiers",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("enabled", sa.Boolean(), nullable=False),
|
|
sa.Column("apprise_url", sa.String(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_group_events_notifiers_group_id"), "group_events_notifiers", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"group_meal_plan_rules",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("day", sa.String(), nullable=False),
|
|
sa.Column("entry_type", sa.String(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"group_preferences",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("private_group", sa.Boolean(), nullable=True),
|
|
sa.Column("first_day_of_week", sa.Integer(), nullable=True),
|
|
sa.Column("recipe_public", sa.Boolean(), nullable=True),
|
|
sa.Column("recipe_show_nutrition", sa.Boolean(), nullable=True),
|
|
sa.Column("recipe_show_assets", sa.Boolean(), nullable=True),
|
|
sa.Column("recipe_landscape_view", sa.Boolean(), nullable=True),
|
|
sa.Column("recipe_disable_comments", sa.Boolean(), nullable=True),
|
|
sa.Column("recipe_disable_amount", sa.Boolean(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_group_preferences_group_id"), "group_preferences", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"group_reports",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("status", sa.String(), nullable=False),
|
|
sa.Column("category", sa.String(), nullable=False),
|
|
sa.Column("timestamp", sa.DateTime(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_group_reports_category"), "group_reports", ["category"], unique=False)
|
|
op.create_index(op.f("ix_group_reports_group_id"), "group_reports", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"ingredient_units",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.Column("description", sa.String(), nullable=True),
|
|
sa.Column("abbreviation", sa.String(), nullable=True),
|
|
sa.Column("fraction", sa.Boolean(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"invite_tokens",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("token", sa.String(), nullable=False),
|
|
sa.Column("uses_left", sa.Integer(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_invite_tokens_token"), "invite_tokens", ["token"], unique=True)
|
|
op.create_table(
|
|
"multi_purpose_labels",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(length=255), nullable=False),
|
|
sa.Column("color", sa.String(length=10), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_multi_purpose_labels_group_id"), "multi_purpose_labels", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"recipes",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("slug", sa.String(), nullable=True),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("description", sa.String(), nullable=True),
|
|
sa.Column("image", sa.String(), nullable=True),
|
|
sa.Column("total_time", sa.String(), nullable=True),
|
|
sa.Column("prep_time", sa.String(), nullable=True),
|
|
sa.Column("perform_time", sa.String(), nullable=True),
|
|
sa.Column("cook_time", sa.String(), nullable=True),
|
|
sa.Column("recipe_yield", sa.String(), nullable=True),
|
|
sa.Column("recipeCuisine", sa.String(), nullable=True),
|
|
sa.Column("rating", sa.Integer(), nullable=True),
|
|
sa.Column("org_url", sa.String(), nullable=True),
|
|
sa.Column("date_added", sa.Date(), nullable=True),
|
|
sa.Column("date_updated", sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(["user_id"], ["users.id"], use_alter=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("slug", "group_id", name="recipe_slug_group_id_key"),
|
|
)
|
|
op.create_index(op.f("ix_recipes_group_id"), "recipes", ["group_id"], unique=False)
|
|
op.create_index(op.f("ix_recipes_slug"), "recipes", ["slug"], unique=False)
|
|
op.create_index(op.f("ix_recipes_user_id"), "recipes", ["user_id"], unique=False)
|
|
op.create_table(
|
|
"server_tasks",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("completed_date", sa.DateTime(), nullable=True),
|
|
sa.Column("status", sa.String(), nullable=False),
|
|
sa.Column("log", sa.String(), nullable=True),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_server_tasks_group_id"), "server_tasks", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"shopping_lists",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_shopping_lists_group_id"), "shopping_lists", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"tags",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("slug", sa.String(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("slug", "group_id", name="tags_slug_group_id_key"),
|
|
)
|
|
op.create_index(op.f("ix_tags_group_id"), "tags", ["group_id"], unique=False)
|
|
op.create_index(op.f("ix_tags_name"), "tags", ["name"], unique=False)
|
|
op.create_index(op.f("ix_tags_slug"), "tags", ["slug"], unique=False)
|
|
op.create_table(
|
|
"tools",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("slug", sa.String(), nullable=False),
|
|
sa.Column("on_hand", sa.Boolean(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("slug", "group_id", name="tools_slug_group_id_key"),
|
|
)
|
|
op.create_index(op.f("ix_tools_name"), "tools", ["name"], unique=True)
|
|
op.create_index(op.f("ix_tools_slug"), "tools", ["slug"], unique=True)
|
|
op.create_table(
|
|
"webhook_urls",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("enabled", sa.Boolean(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.Column("url", sa.String(), nullable=True),
|
|
sa.Column("time", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_webhook_urls_group_id"), "webhook_urls", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"api_extras",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("recipee_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("key_name", sa.String(), nullable=True),
|
|
sa.Column("value", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipee_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"cookbooks_to_categories",
|
|
sa.Column("cookbook_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["category_id"],
|
|
["categories.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["cookbook_id"],
|
|
["cookbooks.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"group_events_notifier_options",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("event_notifier_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("recipe_created", sa.Boolean(), nullable=False),
|
|
sa.Column("recipe_updated", sa.Boolean(), nullable=False),
|
|
sa.Column("recipe_deleted", sa.Boolean(), nullable=False),
|
|
sa.Column("user_signup", sa.Boolean(), nullable=False),
|
|
sa.Column("data_migrations", sa.Boolean(), nullable=False),
|
|
sa.Column("data_export", sa.Boolean(), nullable=False),
|
|
sa.Column("data_import", sa.Boolean(), nullable=False),
|
|
sa.Column("mealplan_entry_created", sa.Boolean(), nullable=False),
|
|
sa.Column("shopping_list_created", sa.Boolean(), nullable=False),
|
|
sa.Column("shopping_list_updated", sa.Boolean(), nullable=False),
|
|
sa.Column("shopping_list_deleted", sa.Boolean(), nullable=False),
|
|
sa.Column("cookbook_created", sa.Boolean(), nullable=False),
|
|
sa.Column("cookbook_updated", sa.Boolean(), nullable=False),
|
|
sa.Column("cookbook_deleted", sa.Boolean(), nullable=False),
|
|
sa.Column("tag_created", sa.Boolean(), nullable=False),
|
|
sa.Column("tag_updated", sa.Boolean(), nullable=False),
|
|
sa.Column("tag_deleted", sa.Boolean(), nullable=False),
|
|
sa.Column("category_created", sa.Boolean(), nullable=False),
|
|
sa.Column("category_updated", sa.Boolean(), nullable=False),
|
|
sa.Column("category_deleted", sa.Boolean(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["event_notifier_id"],
|
|
["group_events_notifiers.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"group_meal_plans",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("date", sa.Date(), nullable=False),
|
|
sa.Column("entry_type", sa.String(), nullable=False),
|
|
sa.Column("title", sa.String(), nullable=False),
|
|
sa.Column("text", sa.String(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_group_meal_plans_date"), "group_meal_plans", ["date"], unique=False)
|
|
op.create_index(op.f("ix_group_meal_plans_entry_type"), "group_meal_plans", ["entry_type"], unique=False)
|
|
op.create_index(op.f("ix_group_meal_plans_group_id"), "group_meal_plans", ["group_id"], unique=False)
|
|
op.create_index(op.f("ix_group_meal_plans_recipe_id"), "group_meal_plans", ["recipe_id"], unique=False)
|
|
op.create_index(op.f("ix_group_meal_plans_title"), "group_meal_plans", ["title"], unique=False)
|
|
op.create_table(
|
|
"group_to_categories",
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["category_id"],
|
|
["categories.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"ingredient_foods",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.Column("description", sa.String(), nullable=True),
|
|
sa.Column("label_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["label_id"],
|
|
["multi_purpose_labels.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"notes",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("title", sa.String(), nullable=True),
|
|
sa.Column("text", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"plan_rules_to_categories",
|
|
sa.Column("group_plan_rule_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["category_id"],
|
|
["categories.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["group_plan_rule_id"],
|
|
["group_meal_plan_rules.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"plan_rules_to_tags",
|
|
sa.Column("plan_rule_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("tag_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["plan_rule_id"],
|
|
["group_meal_plan_rules.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tag_id"],
|
|
["tags.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"recipe_assets",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.Column("icon", sa.String(), nullable=True),
|
|
sa.Column("file_name", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipe_instructions",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("position", sa.Integer(), nullable=True),
|
|
sa.Column("type", sa.String(), nullable=True),
|
|
sa.Column("title", sa.String(), nullable=True),
|
|
sa.Column("text", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipe_nutrition",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("calories", sa.String(), nullable=True),
|
|
sa.Column("fat_content", sa.String(), nullable=True),
|
|
sa.Column("fiber_content", sa.String(), nullable=True),
|
|
sa.Column("protein_content", sa.String(), nullable=True),
|
|
sa.Column("carbohydrate_content", sa.String(), nullable=True),
|
|
sa.Column("sodium_content", sa.String(), nullable=True),
|
|
sa.Column("sugar_content", sa.String(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipe_settings",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("public", sa.Boolean(), nullable=True),
|
|
sa.Column("show_nutrition", sa.Boolean(), nullable=True),
|
|
sa.Column("show_assets", sa.Boolean(), nullable=True),
|
|
sa.Column("landscape_view", sa.Boolean(), nullable=True),
|
|
sa.Column("disable_amount", sa.Boolean(), nullable=True),
|
|
sa.Column("disable_comments", sa.Boolean(), nullable=True),
|
|
sa.Column("locked", sa.Boolean(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipe_share_tokens",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("expires_at", sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_recipe_share_tokens_group_id"), "recipe_share_tokens", ["group_id"], unique=False)
|
|
op.create_table(
|
|
"recipes_to_categories",
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["category_id"],
|
|
["categories.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"recipes_to_tags",
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("tag_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tag_id"],
|
|
["tags.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"recipes_to_tools",
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("tool_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["tool_id"],
|
|
["tools.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"report_entries",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("success", sa.Boolean(), nullable=True),
|
|
sa.Column("message", sa.String(), nullable=True),
|
|
sa.Column("exception", sa.String(), nullable=True),
|
|
sa.Column("timestamp", sa.DateTime(), nullable=False),
|
|
sa.Column("report_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["report_id"],
|
|
["group_reports.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"shopping_list_recipe_reference",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("shopping_list_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("recipe_quantity", sa.Float(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["shopping_list_id"],
|
|
["shopping_lists.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id", "shopping_list_id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_shopping_list_recipe_reference_recipe_id"),
|
|
"shopping_list_recipe_reference",
|
|
["recipe_id"],
|
|
unique=False,
|
|
)
|
|
op.create_table(
|
|
"users",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("full_name", sa.String(), nullable=True),
|
|
sa.Column("username", sa.String(), nullable=True),
|
|
sa.Column("email", sa.String(), nullable=True),
|
|
sa.Column("password", sa.String(), nullable=True),
|
|
sa.Column("admin", sa.Boolean(), nullable=True),
|
|
sa.Column("advanced", sa.Boolean(), nullable=True),
|
|
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("cache_key", sa.String(), nullable=True),
|
|
sa.Column("can_manage", sa.Boolean(), nullable=True),
|
|
sa.Column("can_invite", sa.Boolean(), nullable=True),
|
|
sa.Column("can_organize", sa.Boolean(), nullable=True),
|
|
sa.Column("owned_recipes_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["group_id"],
|
|
["groups.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["owned_recipes_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_users_email"), "users", ["email"], unique=True)
|
|
op.create_index(op.f("ix_users_full_name"), "users", ["full_name"], unique=False)
|
|
op.create_index(op.f("ix_users_group_id"), "users", ["group_id"], unique=False)
|
|
op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True)
|
|
op.create_table(
|
|
"long_live_tokens",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("name", sa.String(), nullable=False),
|
|
sa.Column("token", sa.String(), nullable=False),
|
|
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"password_reset_tokens",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("token", sa.String(length=64), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("token"),
|
|
)
|
|
op.create_table(
|
|
"recipe_comments",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("text", sa.String(), nullable=True),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipe_ingredient_ref_link",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("instruction_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("reference_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["instruction_id"],
|
|
["recipe_instructions.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"recipes_ingredients",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("position", sa.Integer(), nullable=True),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("title", sa.String(), nullable=True),
|
|
sa.Column("note", sa.String(), nullable=True),
|
|
sa.Column("unit_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("food_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("quantity", sa.Integer(), nullable=True),
|
|
sa.Column("reference_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["food_id"],
|
|
["ingredient_foods.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["unit_id"],
|
|
["ingredient_units.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"shopping_list_items",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("shopping_list_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("is_ingredient", sa.Boolean(), nullable=True),
|
|
sa.Column("position", sa.Integer(), nullable=False),
|
|
sa.Column("checked", sa.Boolean(), nullable=True),
|
|
sa.Column("quantity", sa.Float(), nullable=True),
|
|
sa.Column("note", sa.String(), nullable=True),
|
|
sa.Column("is_food", sa.Boolean(), nullable=True),
|
|
sa.Column("unit_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("food_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("label_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["food_id"],
|
|
["ingredient_foods.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["label_id"],
|
|
["multi_purpose_labels.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["shopping_list_id"],
|
|
["shopping_lists.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["unit_id"],
|
|
["ingredient_units.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"users_to_favorites",
|
|
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["user_id"],
|
|
["users.id"],
|
|
),
|
|
)
|
|
op.create_table(
|
|
"shopping_list_item_recipe_reference",
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
|
sa.Column("update_at", sa.DateTime(), nullable=True),
|
|
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("shopping_list_item_id", mealie.db.migration_types.GUID(), nullable=False),
|
|
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
|
|
sa.Column("recipe_quantity", sa.Float(), nullable=False),
|
|
sa.ForeignKeyConstraint(
|
|
["recipe_id"],
|
|
["recipes.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["shopping_list_item_id"],
|
|
["shopping_list_items.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id", "shopping_list_item_id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_shopping_list_item_recipe_reference_recipe_id"),
|
|
"shopping_list_item_recipe_reference",
|
|
["recipe_id"],
|
|
unique=False,
|
|
)
|
|
|
|
|
|
def downgrade():
|
|
op.drop_index(
|
|
op.f("ix_shopping_list_item_recipe_reference_recipe_id"), table_name="shopping_list_item_recipe_reference"
|
|
)
|
|
op.drop_table("shopping_list_item_recipe_reference")
|
|
op.drop_table("users_to_favorites")
|
|
op.drop_table("shopping_list_items")
|
|
op.drop_table("recipes_ingredients")
|
|
op.drop_table("recipe_ingredient_ref_link")
|
|
op.drop_table("recipe_comments")
|
|
op.drop_table("password_reset_tokens")
|
|
op.drop_table("long_live_tokens")
|
|
op.drop_index(op.f("ix_users_username"), table_name="users")
|
|
op.drop_index(op.f("ix_users_group_id"), table_name="users")
|
|
op.drop_index(op.f("ix_users_full_name"), table_name="users")
|
|
op.drop_index(op.f("ix_users_email"), table_name="users")
|
|
op.drop_table("users")
|
|
op.drop_index(op.f("ix_shopping_list_recipe_reference_recipe_id"), table_name="shopping_list_recipe_reference")
|
|
op.drop_table("shopping_list_recipe_reference")
|
|
op.drop_table("report_entries")
|
|
op.drop_table("recipes_to_tools")
|
|
op.drop_table("recipes_to_tags")
|
|
op.drop_table("recipes_to_categories")
|
|
op.drop_index(op.f("ix_recipe_share_tokens_group_id"), table_name="recipe_share_tokens")
|
|
op.drop_table("recipe_share_tokens")
|
|
op.drop_table("recipe_settings")
|
|
op.drop_table("recipe_nutrition")
|
|
op.drop_table("recipe_instructions")
|
|
op.drop_table("recipe_assets")
|
|
op.drop_table("plan_rules_to_tags")
|
|
op.drop_table("plan_rules_to_categories")
|
|
op.drop_table("notes")
|
|
op.drop_table("ingredient_foods")
|
|
op.drop_table("group_to_categories")
|
|
op.drop_index(op.f("ix_group_meal_plans_title"), table_name="group_meal_plans")
|
|
op.drop_index(op.f("ix_group_meal_plans_recipe_id"), table_name="group_meal_plans")
|
|
op.drop_index(op.f("ix_group_meal_plans_group_id"), table_name="group_meal_plans")
|
|
op.drop_index(op.f("ix_group_meal_plans_entry_type"), table_name="group_meal_plans")
|
|
op.drop_index(op.f("ix_group_meal_plans_date"), table_name="group_meal_plans")
|
|
op.drop_table("group_meal_plans")
|
|
op.drop_table("group_events_notifier_options")
|
|
op.drop_table("cookbooks_to_categories")
|
|
op.drop_table("api_extras")
|
|
op.drop_index(op.f("ix_webhook_urls_group_id"), table_name="webhook_urls")
|
|
op.drop_table("webhook_urls")
|
|
op.drop_index(op.f("ix_tools_slug"), table_name="tools")
|
|
op.drop_index(op.f("ix_tools_name"), table_name="tools")
|
|
op.drop_table("tools")
|
|
op.drop_index(op.f("ix_tags_slug"), table_name="tags")
|
|
op.drop_index(op.f("ix_tags_name"), table_name="tags")
|
|
op.drop_index(op.f("ix_tags_group_id"), table_name="tags")
|
|
op.drop_table("tags")
|
|
op.drop_index(op.f("ix_shopping_lists_group_id"), table_name="shopping_lists")
|
|
op.drop_table("shopping_lists")
|
|
op.drop_index(op.f("ix_server_tasks_group_id"), table_name="server_tasks")
|
|
op.drop_table("server_tasks")
|
|
op.drop_index(op.f("ix_recipes_user_id"), table_name="recipes")
|
|
op.drop_index(op.f("ix_recipes_slug"), table_name="recipes")
|
|
op.drop_index(op.f("ix_recipes_group_id"), table_name="recipes")
|
|
op.drop_table("recipes")
|
|
op.drop_index(op.f("ix_multi_purpose_labels_group_id"), table_name="multi_purpose_labels")
|
|
op.drop_table("multi_purpose_labels")
|
|
op.drop_index(op.f("ix_invite_tokens_token"), table_name="invite_tokens")
|
|
op.drop_table("invite_tokens")
|
|
op.drop_table("ingredient_units")
|
|
op.drop_index(op.f("ix_group_reports_group_id"), table_name="group_reports")
|
|
op.drop_index(op.f("ix_group_reports_category"), table_name="group_reports")
|
|
op.drop_table("group_reports")
|
|
op.drop_index(op.f("ix_group_preferences_group_id"), table_name="group_preferences")
|
|
op.drop_table("group_preferences")
|
|
op.drop_table("group_meal_plan_rules")
|
|
op.drop_index(op.f("ix_group_events_notifiers_group_id"), table_name="group_events_notifiers")
|
|
op.drop_table("group_events_notifiers")
|
|
op.drop_index(op.f("ix_group_data_exports_group_id"), table_name="group_data_exports")
|
|
op.drop_table("group_data_exports")
|
|
op.drop_table("cookbooks")
|
|
op.drop_index(op.f("ix_categories_slug"), table_name="categories")
|
|
op.drop_index(op.f("ix_categories_name"), table_name="categories")
|
|
op.drop_index(op.f("ix_categories_group_id"), table_name="categories")
|
|
op.drop_table("categories")
|
|
op.drop_index(op.f("ix_groups_name"), table_name="groups")
|
|
op.drop_table("groups")
|