0027_standard_webhooks.py 1.2 KB

12345678910111213141516171819202122232425262728
  1. import sqlalchemy as sa
  2. from alembic import op
  3. from sqlalchemy.dialects.mysql import BINARY
  4. revision = "0027_standard_webhooks"
  5. down_revision = "0026_business_poll"
  6. branch_labels = None
  7. depends_on = None
  8. def upgrade():
  9. # 现有密钥保留原协议;Standard Webhooks 独立登记密钥,摘要唯一约束禁止跨绑定复用。
  10. op.add_column("channel_keys", sa.Column(
  11. "protocol", sa.String(32), nullable=False, server_default="zhifu-hmac"))
  12. op.alter_column("channel_keys", "protocol", existing_type=sa.String(32), server_default=None)
  13. op.add_column("channel_keys", sa.Column("credential_fingerprint", BINARY(32), nullable=True))
  14. op.create_check_constraint(
  15. "protocol", "channel_keys",
  16. "protocol IN ('zhifu-hmac','standard-webhooks')")
  17. op.create_unique_constraint(
  18. "uq_channel_keys_standard_secret", "channel_keys", ["credential_fingerprint"])
  19. def downgrade():
  20. op.drop_constraint("uq_channel_keys_standard_secret", "channel_keys", type_="unique")
  21. op.drop_constraint(op.f("ck_channel_keys_protocol"), "channel_keys", type_="check")
  22. op.drop_column("channel_keys", "credential_fingerprint")
  23. op.drop_column("channel_keys", "protocol")