All checks were successful
continuous-integration/drone/push Build is passing
217 lines
8.9 KiB
Python
217 lines
8.9 KiB
Python
"""Add nutrition service tables
|
|
|
|
Revision ID: a2e71842cf5a
|
|
Revises: c78a12db4567
|
|
Create Date: 2025-10-16 10:00:00.000000
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = "a2e71842cf5a"
|
|
down_revision = "c78a12db4567"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
|
|
# Создание таблицы food_items
|
|
op.create_table(
|
|
"food_items",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uuid", postgresql.UUID(as_uuid=True), nullable=True),
|
|
sa.Column("fatsecret_id", sa.String(length=50), nullable=True),
|
|
sa.Column("name", sa.String(length=255), nullable=False),
|
|
sa.Column("brand", sa.String(length=255), nullable=True),
|
|
sa.Column("description", sa.Text(), nullable=True),
|
|
sa.Column("food_type", sa.String(length=50), nullable=True),
|
|
sa.Column("serving_size", sa.String(length=100), nullable=True),
|
|
sa.Column("serving_weight_grams", sa.Float(), nullable=True),
|
|
sa.Column("calories", sa.Float(), nullable=True),
|
|
sa.Column("protein_grams", sa.Float(), nullable=True),
|
|
sa.Column("fat_grams", sa.Float(), nullable=True),
|
|
sa.Column("carbs_grams", sa.Float(), nullable=True),
|
|
sa.Column("fiber_grams", sa.Float(), nullable=True),
|
|
sa.Column("sugar_grams", sa.Float(), nullable=True),
|
|
sa.Column("sodium_mg", sa.Float(), nullable=True),
|
|
sa.Column("cholesterol_mg", sa.Float(), nullable=True),
|
|
sa.Column("ingredients", sa.Text(), nullable=True),
|
|
sa.Column("is_verified", sa.Boolean(), nullable=True),
|
|
sa.Column(
|
|
"created_at",
|
|
sa.TIMESTAMP(timezone=True),
|
|
server_default=sa.text("now()"),
|
|
nullable=False,
|
|
),
|
|
sa.Column("updated_at", sa.TIMESTAMP(timezone=True), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_food_items_fatsecret_id"), "food_items", ["fatsecret_id"], unique=True
|
|
)
|
|
op.create_index(op.f("ix_food_items_uuid"), "food_items", ["uuid"], unique=True)
|
|
|
|
# Создание таблицы user_nutrition_entries
|
|
op.create_table(
|
|
"user_nutrition_entries",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uuid", postgresql.UUID(as_uuid=True), nullable=True),
|
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
|
sa.Column("entry_date", sa.Date(), nullable=False),
|
|
sa.Column("meal_type", sa.String(length=50), nullable=False),
|
|
sa.Column("food_item_id", sa.Integer(), nullable=True),
|
|
sa.Column("custom_food_name", sa.String(length=255), nullable=True),
|
|
sa.Column("quantity", sa.Float(), nullable=False),
|
|
sa.Column("unit", sa.String(length=50), nullable=True),
|
|
sa.Column("calories", sa.Float(), nullable=True),
|
|
sa.Column("protein_grams", sa.Float(), nullable=True),
|
|
sa.Column("fat_grams", sa.Float(), nullable=True),
|
|
sa.Column("carbs_grams", sa.Float(), nullable=True),
|
|
sa.Column("notes", sa.Text(), nullable=True),
|
|
sa.Column(
|
|
"created_at",
|
|
sa.TIMESTAMP(timezone=True),
|
|
server_default=sa.text("now()"),
|
|
nullable=False,
|
|
),
|
|
sa.Column("updated_at", sa.TIMESTAMP(timezone=True), nullable=True),
|
|
sa.ForeignKeyConstraint(["food_item_id"], ["food_items.id"],),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_nutrition_entries_entry_date"),
|
|
"user_nutrition_entries",
|
|
["entry_date"],
|
|
unique=False,
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_nutrition_entries_user_id"),
|
|
"user_nutrition_entries",
|
|
["user_id"],
|
|
unique=False,
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_nutrition_entries_uuid"),
|
|
"user_nutrition_entries",
|
|
["uuid"],
|
|
unique=True
|
|
)
|
|
|
|
# Создание таблицы water_intake
|
|
op.create_table(
|
|
"water_intake",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uuid", postgresql.UUID(as_uuid=True), nullable=True),
|
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
|
sa.Column("entry_date", sa.Date(), nullable=False),
|
|
sa.Column("amount_ml", sa.Integer(), nullable=False),
|
|
sa.Column(
|
|
"entry_time",
|
|
sa.TIMESTAMP(timezone=True),
|
|
server_default=sa.text("now()"),
|
|
nullable=False,
|
|
),
|
|
sa.Column("notes", sa.Text(), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_water_intake_entry_date"), "water_intake", ["entry_date"], unique=False
|
|
)
|
|
op.create_index(
|
|
op.f("ix_water_intake_user_id"), "water_intake", ["user_id"], unique=False
|
|
)
|
|
op.create_index(op.f("ix_water_intake_uuid"), "water_intake", ["uuid"], unique=True)
|
|
|
|
# Создание таблицы user_activity_entries
|
|
op.create_table(
|
|
"user_activity_entries",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("uuid", postgresql.UUID(as_uuid=True), nullable=True),
|
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
|
sa.Column("entry_date", sa.Date(), nullable=False),
|
|
sa.Column("activity_type", sa.String(length=100), nullable=False),
|
|
sa.Column("duration_minutes", sa.Integer(), nullable=False),
|
|
sa.Column("calories_burned", sa.Float(), nullable=True),
|
|
sa.Column("distance_km", sa.Float(), nullable=True),
|
|
sa.Column("steps", sa.Integer(), nullable=True),
|
|
sa.Column("intensity", sa.String(length=20), nullable=True),
|
|
sa.Column("notes", sa.Text(), nullable=True),
|
|
sa.Column(
|
|
"created_at",
|
|
sa.TIMESTAMP(timezone=True),
|
|
server_default=sa.text("now()"),
|
|
nullable=False,
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_activity_entries_entry_date"),
|
|
"user_activity_entries",
|
|
["entry_date"],
|
|
unique=False,
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_activity_entries_user_id"),
|
|
"user_activity_entries",
|
|
["user_id"],
|
|
unique=False,
|
|
)
|
|
op.create_index(
|
|
op.f("ix_user_activity_entries_uuid"),
|
|
"user_activity_entries",
|
|
["uuid"],
|
|
unique=True
|
|
)
|
|
|
|
# Создание таблицы nutrition_goals
|
|
op.create_table(
|
|
"nutrition_goals",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
|
sa.Column("daily_calorie_goal", sa.Integer(), nullable=True),
|
|
sa.Column("protein_goal_grams", sa.Integer(), nullable=True),
|
|
sa.Column("fat_goal_grams", sa.Integer(), nullable=True),
|
|
sa.Column("carbs_goal_grams", sa.Integer(), nullable=True),
|
|
sa.Column("water_goal_ml", sa.Integer(), nullable=True),
|
|
sa.Column("activity_goal_minutes", sa.Integer(), nullable=True),
|
|
sa.Column("weight_goal_kg", sa.Float(), nullable=True),
|
|
sa.Column("goal_type", sa.String(length=50), nullable=True),
|
|
sa.Column(
|
|
"created_at",
|
|
sa.TIMESTAMP(timezone=True),
|
|
server_default=sa.text("now()"),
|
|
nullable=False,
|
|
),
|
|
sa.Column("updated_at", sa.TIMESTAMP(timezone=True), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(
|
|
op.f("ix_nutrition_goals_user_id"), "nutrition_goals", ["user_id"], unique=True
|
|
)
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_index(op.f("ix_nutrition_goals_user_id"), table_name="nutrition_goals")
|
|
op.drop_table("nutrition_goals")
|
|
op.drop_index(op.f("ix_user_activity_entries_uuid"), table_name="user_activity_entries")
|
|
op.drop_index(op.f("ix_user_activity_entries_user_id"), table_name="user_activity_entries")
|
|
op.drop_index(op.f("ix_user_activity_entries_entry_date"), table_name="user_activity_entries")
|
|
op.drop_table("user_activity_entries")
|
|
op.drop_index(op.f("ix_water_intake_uuid"), table_name="water_intake")
|
|
op.drop_index(op.f("ix_water_intake_user_id"), table_name="water_intake")
|
|
op.drop_index(op.f("ix_water_intake_entry_date"), table_name="water_intake")
|
|
op.drop_table("water_intake")
|
|
op.drop_index(op.f("ix_user_nutrition_entries_uuid"), table_name="user_nutrition_entries")
|
|
op.drop_index(op.f("ix_user_nutrition_entries_user_id"), table_name="user_nutrition_entries")
|
|
op.drop_index(op.f("ix_user_nutrition_entries_entry_date"), table_name="user_nutrition_entries")
|
|
op.drop_table("user_nutrition_entries")
|
|
op.drop_index(op.f("ix_food_items_uuid"), table_name="food_items")
|
|
op.drop_index(op.f("ix_food_items_fatsecret_id"), table_name="food_items")
|
|
op.drop_table("food_items")
|
|
# ### end Alembic commands ### |