client/alembic/versions/d7c8af95bc8e_initial.py (283 lines of code) (raw):
"""Initial schema, squashed from old head 9ba8d7524871 (per #1500).
Revision ID: d7c8af95bc8e
Revises:
Create Date: 2022-06-09 16:41:11.913336
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "d7c8af95bc8e"
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"sources",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("journalist_designation", sa.String(length=255), nullable=False),
sa.Column("document_count", sa.Integer(), server_default=sa.text("0"), nullable=False),
sa.Column(
"is_flagged", sa.Boolean(name="is_flagged"), server_default=sa.text("0"), nullable=True
),
sa.Column("public_key", sa.Text(), nullable=True),
sa.Column("fingerprint", sa.String(length=64), nullable=True),
sa.Column("interaction_count", sa.Integer(), server_default=sa.text("0"), nullable=False),
sa.Column(
"is_starred", sa.Boolean(name="is_starred"), server_default=sa.text("0"), nullable=True
),
sa.Column("last_updated", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id", name=op.f("pk_sources")),
sa.UniqueConstraint("uuid", name=op.f("uq_sources_uuid")),
)
op.create_table(
"users",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("username", sa.String(length=255), nullable=False),
sa.Column("firstname", sa.String(length=64), nullable=True),
sa.Column("lastname", sa.String(length=64), nullable=True),
sa.PrimaryKeyConstraint("id", name=op.f("pk_users")),
sa.UniqueConstraint("uuid", name=op.f("uq_users_uuid")),
)
op.create_table(
"replysendstatuses",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("name", sa.String(length=36), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_replysendstatuses")),
sa.UniqueConstraint("name", name=op.f("uq_replysendstatuses_name")),
)
op.create_table(
"draftreplies",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("timestamp", sa.DateTime(), nullable=False),
sa.Column("source_id", sa.Integer(), nullable=False),
sa.Column("journalist_id", sa.Integer(), nullable=True),
sa.Column("file_counter", sa.Integer(), nullable=False),
sa.Column("content", sa.Text(), nullable=True),
sa.Column("send_status_id", sa.Integer(), nullable=True),
sa.UniqueConstraint("uuid", name=op.f("uq_draftreplies_uuid")),
sa.ForeignKeyConstraint(
["source_id"], ["sources.id"], name=op.f("fk_draftreplies_source_id_sources")
),
sa.ForeignKeyConstraint(
["journalist_id"], ["users.id"], name=op.f("fk_draftreplies_journalist_id_users")
),
sa.ForeignKeyConstraint(
["send_status_id"],
["replysendstatuses.id"],
name=op.f("fk_draftreplies_send_status_id_replysendstatuses"),
),
sa.PrimaryKeyConstraint("id", name=op.f("pk_draftreplies")),
)
op.create_table(
"downloaderrors",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("name", sa.String(length=36), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_downloaderrors")),
sa.UniqueConstraint("name", name=op.f("uq_downloaderrors_name")),
)
op.create_table(
"files",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("filename", sa.String(length=255), nullable=False),
sa.Column("file_counter", sa.Integer(), nullable=False),
sa.Column("size", sa.Integer(), nullable=False),
sa.Column("download_url", sa.String(length=255), nullable=False),
sa.Column(
"is_downloaded",
sa.Boolean(name="is_downloaded"),
server_default=sa.text("0"),
nullable=False,
),
sa.Column(
"is_decrypted",
sa.Boolean(name="is_decrypted"),
sa.CheckConstraint(
"CASE WHEN is_downloaded = 0 THEN is_decrypted IS NULL ELSE 1 END",
name="files_compare_is_downloaded_vs_is_decrypted",
),
nullable=True,
),
sa.Column("download_error_id", sa.Integer(), nullable=True),
sa.Column(
"is_read", sa.Boolean(name="is_read"), server_default=sa.text("0"), nullable=False
),
sa.Column("source_id", sa.Integer(), nullable=False),
sa.Column("last_updated", sa.DateTime(), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_files")),
sa.UniqueConstraint("source_id", "file_counter", name="uq_messages_source_id_file_counter"),
sa.UniqueConstraint("uuid", name=op.f("uq_files_uuid")),
sa.ForeignKeyConstraint(
["download_error_id"],
["downloaderrors.id"],
name=op.f("fk_files_download_error_id_downloaderrors"),
),
sa.ForeignKeyConstraint(
["source_id"], ["sources.id"], name=op.f("fk_files_source_id_sources")
),
)
op.create_table(
"messages",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("filename", sa.String(length=255), nullable=False),
sa.Column("file_counter", sa.Integer(), nullable=False),
sa.Column("size", sa.Integer(), nullable=False),
sa.Column("download_url", sa.String(length=255), nullable=False),
sa.Column(
"is_downloaded",
sa.Boolean(name="is_downloaded"),
server_default=sa.text("0"),
nullable=False,
),
sa.Column(
"is_decrypted",
sa.Boolean(name="is_decrypted"),
sa.CheckConstraint(
"CASE WHEN is_downloaded = 0 THEN is_decrypted IS NULL ELSE 1 END",
name="messages_compare_is_downloaded_vs_is_decrypted",
),
nullable=True,
),
sa.Column("download_error_id", sa.Integer(), nullable=True),
sa.Column(
"is_read", sa.Boolean(name="is_read"), server_default=sa.text("0"), nullable=False
),
sa.Column(
"content",
sa.Text(),
sa.CheckConstraint(
"CASE WHEN is_downloaded = 0 THEN content IS NULL ELSE 1 END",
name="ck_message_compare_download_vs_content",
),
nullable=True,
),
sa.Column("source_id", sa.Integer(), nullable=False),
sa.Column("last_updated", sa.DateTime(), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_messages")),
sa.UniqueConstraint("source_id", "file_counter", name="uq_messages_source_id_file_counter"),
sa.UniqueConstraint("uuid", name=op.f("uq_messages_uuid")),
sa.ForeignKeyConstraint(
["download_error_id"],
["downloaderrors.id"],
name=op.f("fk_messages_download_error_id_downloaderrors"),
),
sa.ForeignKeyConstraint(
["source_id"], ["sources.id"], name=op.f("fk_messages_source_id_sources")
),
)
op.create_table(
"replies",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.Column("source_id", sa.Integer(), nullable=False),
sa.Column("filename", sa.String(length=255), nullable=False),
sa.Column("file_counter", sa.Integer(), nullable=False),
sa.Column("size", sa.Integer(), nullable=True),
sa.Column(
"content",
sa.Text(),
sa.CheckConstraint(
"CASE WHEN is_downloaded = 0 THEN content IS NULL ELSE 1 END",
name="replies_compare_download_vs_content",
),
nullable=True,
),
sa.Column(
"is_decrypted",
sa.Boolean(name="is_decrypted"),
sa.CheckConstraint(
"CASE WHEN is_downloaded = 0 THEN is_decrypted IS NULL ELSE 1 END",
name="replies_compare_is_downloaded_vs_is_decrypted",
),
nullable=True,
),
sa.Column("is_downloaded", sa.Boolean(name="is_downloaded"), nullable=True),
sa.Column("download_error_id", sa.Integer(), nullable=True),
sa.Column("journalist_id", sa.Integer(), nullable=True),
sa.Column("last_updated", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(
["download_error_id"],
["downloaderrors.id"],
name=op.f("fk_replies_download_error_id_downloaderrors"),
),
sa.ForeignKeyConstraint(
["journalist_id"], ["users.id"], name=op.f("fk_replies_journalist_id_users")
),
sa.ForeignKeyConstraint(
["source_id"], ["sources.id"], name=op.f("fk_replies_source_id_sources")
),
sa.PrimaryKeyConstraint("id", name=op.f("pk_replies")),
sa.UniqueConstraint("source_id", "file_counter", name="uq_messages_source_id_file_counter"),
sa.UniqueConstraint("uuid", name=op.f("uq_replies_uuid")),
)
op.create_table(
"seen_files",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("file_id", sa.Integer(), nullable=False),
sa.Column("journalist_id", sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(
["file_id"], ["files.id"], name=op.f("fk_seen_files_file_id_files")
),
sa.ForeignKeyConstraint(
["journalist_id"], ["users.id"], name=op.f("fk_seen_files_journalist_id_users")
),
sa.PrimaryKeyConstraint("id", name=op.f("pk_seen_files")),
sa.UniqueConstraint("file_id", "journalist_id", name=op.f("uq_seen_files_file_id")),
)
op.create_table(
"seen_messages",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("message_id", sa.Integer(), nullable=False),
sa.Column("journalist_id", sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(
["journalist_id"], ["users.id"], name=op.f("fk_seen_messages_journalist_id_users")
),
sa.ForeignKeyConstraint(
["message_id"], ["messages.id"], name=op.f("fk_seen_messages_message_id_messages")
),
sa.PrimaryKeyConstraint("id", name=op.f("pk_seen_messages")),
sa.UniqueConstraint(
"message_id", "journalist_id", name=op.f("uq_seen_messages_message_id")
),
)
op.create_table(
"seen_replies",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("reply_id", sa.Integer(), nullable=False),
sa.Column("journalist_id", sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(
["journalist_id"], ["users.id"], name=op.f("fk_seen_replies_journalist_id_users")
),
sa.ForeignKeyConstraint(
["reply_id"], ["replies.id"], name=op.f("fk_seen_replies_reply_id_replies")
),
sa.PrimaryKeyConstraint("id", name=op.f("pk_seen_replies")),
sa.UniqueConstraint("reply_id", "journalist_id", name=op.f("uq_seen_replies_reply_id")),
)
op.create_table(
"deletedconversation",
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.PrimaryKeyConstraint("uuid", name=op.f("pk_deletedconversation")),
)
op.create_table(
"deletedsource",
sa.Column("uuid", sa.String(length=36), nullable=False),
sa.PrimaryKeyConstraint("uuid", name=op.f("pk_deletedsource")),
)
# ### end Alembic commands ###
# Set enum values:
conn = op.get_bind()
# downloaderrors (from original Alembic version 7f682532afa2)
conn.execute(
"""
INSERT INTO downloaderrors
('name')
VALUES
('CHECKSUM_ERROR'),
('DECRYPTION_ERROR');
"""
)
# replysendstatuses (from original Alembic version 86b01b6290da)
conn.execute(
"""
INSERT INTO replysendstatuses
('name')
VALUES
('PENDING'),
('FAILED');
"""
)
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("seen_replies")
op.drop_table("seen_messages")
op.drop_table("seen_files")
op.drop_table("replies")
op.drop_table("messages")
op.drop_table("files")
op.drop_table("draftreplies")
op.drop_table("users")
op.drop_table("sources")
op.drop_table("replysendstatuses")
op.drop_table("downloaderrors")
op.drop_table("deletedsource")
op.drop_table("deletedconversation")
# ### end Alembic commands ###