fooder-api/fooder/alembic/versions/4e8d78ff6e9e_.py

266 lines
8.8 KiB
Python

"""
Revision ID: 4e8d78ff6e9e
Revises: 97d77db27867
Create Date: 2026-04-07 14:41:20.398451
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = "4e8d78ff6e9e"
down_revision: Union[str, Sequence[str], None] = "97d77db27867"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
_now = sa.text("CURRENT_TIMESTAMP")
_zero_int = sa.text("0")
_zero_float = sa.text("0")
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"userproductusage",
sa.Column("product_id", sa.Integer(), nullable=False),
sa.Column("user_id", sa.Integer(), nullable=False),
sa.Column("count", sa.Integer(), nullable=False),
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("version", sa.Integer(), nullable=False),
sa.Column("created_at", sa.DateTime(), nullable=False),
sa.Column("last_changed", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(
["product_id"],
["product.id"],
),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("user_id", "product_id"),
)
op.create_table(
"usersettings",
sa.Column("user_id", sa.Integer(), nullable=False),
sa.Column("protein_goal", sa.Float(), nullable=False),
sa.Column("carb_goal", sa.Float(), nullable=False),
sa.Column("fat_goal", sa.Float(), nullable=False),
sa.Column("fiber_goal", sa.Float(), nullable=False),
sa.Column("calories_goal", sa.Float(), nullable=False),
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("version", sa.Integer(), nullable=False),
sa.Column("created_at", sa.DateTime(), nullable=False),
sa.Column("last_changed", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("user_id"),
)
# Create default settings for all existing users
op.execute(
sa.text(
"INSERT INTO usersettings"
" (user_id, protein_goal, carb_goal, fat_goal, fiber_goal, calories_goal,"
" version, created_at, last_changed)"
" SELECT id, 0, 0, 0, 0, 0, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP"
' FROM "user"'
)
)
op.drop_table("refreshtoken")
op.add_column(
"diary",
sa.Column(
"protein_goal", sa.Float(), nullable=False, server_default=_zero_float
),
)
op.add_column(
"diary",
sa.Column("carb_goal", sa.Float(), nullable=False, server_default=_zero_float),
)
op.add_column(
"diary",
sa.Column("fat_goal", sa.Float(), nullable=False, server_default=_zero_float),
)
op.add_column(
"diary",
sa.Column("fiber_goal", sa.Float(), nullable=False, server_default=_zero_float),
)
op.add_column(
"diary",
sa.Column(
"calories_goal", sa.Float(), nullable=False, server_default=_zero_float
),
)
op.add_column(
"diary",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"diary",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"diary",
sa.Column("last_changed", sa.DateTime(), nullable=False, server_default=_now),
)
op.create_unique_constraint(None, "diary", ["user_id", "date"])
op.add_column(
"entry",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"entry",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"meal",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"meal",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"meal",
sa.Column("last_changed", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"preset",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"preset",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"preset",
sa.Column("last_changed", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"presetentry",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"presetentry",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"product",
sa.Column("calories", sa.Float(), nullable=False, server_default=_zero_float),
)
op.add_column(
"product",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"product",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"product",
sa.Column("last_changed", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column("product", sa.Column("deleted_at", sa.DateTime(), nullable=True))
op.create_index(
"ix_product_barcode",
"product",
["barcode"],
unique=True,
postgresql_where=sa.text("deleted_at IS NULL"),
sqlite_where=sa.text("deleted_at IS NULL"),
)
op.drop_column("product", "hard_coded_calories")
op.drop_column("product", "usage_count_cached")
op.add_column(
"user",
sa.Column("version", sa.Integer(), nullable=False, server_default=_zero_int),
)
op.add_column(
"user",
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column(
"user",
sa.Column("last_changed", sa.DateTime(), nullable=False, server_default=_now),
)
op.add_column("user", sa.Column("deleted_at", sa.DateTime(), nullable=True))
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column("user", "deleted_at")
op.drop_column("user", "last_changed")
op.drop_column("user", "created_at")
op.drop_column("user", "version")
op.add_column(
"product",
sa.Column(
"usage_count_cached",
sa.BIGINT(),
autoincrement=False,
nullable=False,
),
)
op.add_column(
"product",
sa.Column(
"hard_coded_calories",
sa.DOUBLE_PRECISION(precision=53),
autoincrement=False,
nullable=True,
),
)
op.drop_index(
"ix_product_barcode",
table_name="product",
postgresql_where=sa.text("deleted_at IS NULL"),
sqlite_where=sa.text("deleted_at IS NULL"),
)
op.drop_column("product", "deleted_at")
op.drop_column("product", "last_changed")
op.drop_column("product", "created_at")
op.drop_column("product", "version")
op.drop_column("product", "calories")
op.drop_column("presetentry", "created_at")
op.drop_column("presetentry", "version")
op.drop_column("preset", "last_changed")
op.drop_column("preset", "created_at")
op.drop_column("preset", "version")
op.drop_column("meal", "last_changed")
op.drop_column("meal", "created_at")
op.drop_column("meal", "version")
op.drop_column("entry", "created_at")
op.drop_column("entry", "version")
op.drop_constraint(None, "diary", type_="unique")
op.drop_column("diary", "last_changed")
op.drop_column("diary", "created_at")
op.drop_column("diary", "version")
op.drop_column("diary", "calories_goal")
op.drop_column("diary", "fiber_goal")
op.drop_column("diary", "fat_goal")
op.drop_column("diary", "carb_goal")
op.drop_column("diary", "protein_goal")
op.create_table(
"refreshtoken",
sa.Column("user_id", sa.INTEGER(), autoincrement=False, nullable=False),
sa.Column("token", sa.VARCHAR(), autoincrement=False, nullable=False),
sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
sa.ForeignKeyConstraint(
["user_id"], ["user.id"], name=op.f("refreshtoken_user_id_fkey")
),
sa.PrimaryKeyConstraint("id", name=op.f("refreshtoken_pkey")),
)
op.drop_table("usersettings")
op.drop_table("userproductusage")
# ### end Alembic commands ###