def upgrade()

in client/alembic/versions/d7c8af95bc8e_initial.py [0:0]


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');
    """
    )