0024_channel_inbox.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import sqlalchemy as sa
  2. from alembic import op
  3. from sqlalchemy.dialects import mysql
  4. revision = "0024_channel_inbox"
  5. down_revision = "0023_stream_window"
  6. branch_labels = None
  7. depends_on = None
  8. def upgrade():
  9. op.add_column("conversations", sa.Column("channel", sa.String(16), nullable=False,
  10. server_default="h5"))
  11. op.alter_column("conversations", "channel", server_default=None, existing_type=sa.String(16))
  12. op.add_column("conversations", sa.Column(
  13. "external_subject", sa.String(128, collation="utf8mb4_bin"), nullable=True))
  14. op.create_table("channel_keys",
  15. sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
  16. sa.Column("store_id", mysql.BINARY(16), primary_key=True),
  17. sa.Column("key_id", sa.String(64, collation="utf8mb4_bin"), primary_key=True),
  18. sa.Column("credential_env", sa.String(128), nullable=False),
  19. sa.Column("valid_from", mysql.DATETIME(fsp=6), nullable=False),
  20. sa.Column("valid_until", mysql.DATETIME(fsp=6), nullable=False),
  21. sa.Column("enabled", sa.Boolean(), nullable=False),
  22. sa.ForeignKeyConstraint(["tenant_id", "store_id"],
  23. ["channel_applications.tenant_id", "channel_applications.store_id"]))
  24. op.create_table("channel_nonces",
  25. sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
  26. sa.Column("store_id", mysql.BINARY(16), primary_key=True),
  27. sa.Column("nonce_hash", mysql.BINARY(32), primary_key=True),
  28. sa.Column("expires_at", mysql.DATETIME(fsp=6), nullable=False),
  29. sa.ForeignKeyConstraint(["tenant_id", "store_id"],
  30. ["channel_applications.tenant_id", "channel_applications.store_id"]))
  31. op.create_table("channel_inbox",
  32. sa.Column("id", mysql.BINARY(16), primary_key=True),
  33. sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
  34. sa.Column("store_id", mysql.BINARY(16), nullable=False),
  35. sa.Column("external_message_id", sa.String(128, collation="utf8mb4_bin"), nullable=False),
  36. sa.Column("external_subject", sa.String(128, collation="utf8mb4_bin"), nullable=False),
  37. sa.Column("actor_id", mysql.BINARY(16), nullable=False),
  38. sa.Column("request_hash", mysql.BINARY(32), nullable=False),
  39. sa.Column("response", sa.JSON(), nullable=False),
  40. sa.Column("created_at", mysql.DATETIME(fsp=6), nullable=False),
  41. sa.ForeignKeyConstraint(["tenant_id", "store_id"],
  42. ["channel_applications.tenant_id", "channel_applications.store_id"]),
  43. sa.UniqueConstraint("tenant_id", "store_id", "external_message_id",
  44. name="uq_channel_inbox_message"))
  45. def downgrade():
  46. op.drop_table("channel_inbox")
  47. op.drop_table("channel_nonces")
  48. op.drop_table("channel_keys")
  49. op.drop_column("conversations", "external_subject")
  50. op.drop_column("conversations", "channel")