Make subscription migration idempotent
Check for existing table/column before creating, so the migration doesn't error when init-db has already created the schema.
This commit is contained in:
parent
8171960847
commit
e9bef9982d
1 changed files with 44 additions and 27 deletions
|
|
@ -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():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue