diff --git a/make_post_sell/scripts/alembic/versions/c3f9d1cdffb4_add_shop_subscription.py b/make_post_sell/scripts/alembic/versions/c3f9d1cdffb4_add_shop_subscription.py index 056b8a1..d41f661 100644 --- a/make_post_sell/scripts/alembic/versions/c3f9d1cdffb4_add_shop_subscription.py +++ b/make_post_sell/scripts/alembic/versions/c3f9d1cdffb4_add_shop_subscription.py @@ -18,37 +18,54 @@ depends_on = None from make_post_sell.models.meta import UUIDType +def _table_exists(name): + conn = op.get_bind() + result = conn.execute( + sa.text("SELECT name FROM sqlite_master WHERE type='table' AND name=:name"), + {"name": name}, + ) + return result.fetchone() is not None + + +def _column_exists(table, column): + conn = op.get_bind() + result = conn.execute(sa.text(f"PRAGMA table_info({table})")) + return any(row[1] == column for row in result.fetchall()) + + def upgrade(): # Add subscriptions_enabled column to shops - op.add_column( - "mps_shop", - sa.Column( - "subscriptions_enabled", - sa.Boolean(), - nullable=False, - server_default="1", - ), - ) + if not _column_exists("mps_shop", "subscriptions_enabled"): + op.add_column( + "mps_shop", + sa.Column( + "subscriptions_enabled", + sa.Boolean(), + nullable=False, + server_default="1", + ), + ) # Create shop subscription table - op.create_table( - "mps_shop_subscription", - sa.Column("id", UUIDType, primary_key=True, index=True), - sa.Column( - "shop_id", UUIDType, sa.ForeignKey("mps_shop.id"), nullable=False, index=True - ), - sa.Column( - "user_id", UUIDType, sa.ForeignKey("mps_user.id"), nullable=True, index=True - ), - sa.Column("email", sa.Unicode(64), nullable=False), - sa.Column("frequency", sa.Integer(), nullable=False, server_default="1"), - sa.Column("verified", sa.Boolean(), nullable=False, server_default="0"), - sa.Column("unsubscribe_token", sa.Unicode(64), nullable=False, unique=True), - sa.Column("verify_token", sa.Unicode(64), nullable=True), - sa.Column("last_digest_timestamp", sa.BigInteger(), nullable=False), - sa.Column("created_timestamp", sa.BigInteger(), nullable=False), - sa.Column("disabled", sa.Boolean(), nullable=False, server_default="0"), - ) + if not _table_exists("mps_shop_subscription"): + op.create_table( + "mps_shop_subscription", + sa.Column("id", UUIDType, primary_key=True, index=True), + sa.Column( + "shop_id", UUIDType, sa.ForeignKey("mps_shop.id"), nullable=False, index=True + ), + sa.Column( + "user_id", UUIDType, sa.ForeignKey("mps_user.id"), nullable=True, index=True + ), + sa.Column("email", sa.Unicode(64), nullable=False), + sa.Column("frequency", sa.Integer(), nullable=False, server_default="1"), + sa.Column("verified", sa.Boolean(), nullable=False, server_default="0"), + sa.Column("unsubscribe_token", sa.Unicode(64), nullable=False, unique=True), + sa.Column("verify_token", sa.Unicode(64), nullable=True), + sa.Column("last_digest_timestamp", sa.BigInteger(), nullable=False), + sa.Column("created_timestamp", sa.BigInteger(), nullable=False), + sa.Column("disabled", sa.Boolean(), nullable=False, server_default="0"), + ) def downgrade():