def upgrade()

in src/dispatch/database/revisions/tenant/versions/2023-01-30_e4b4991dddcd.py [0:0]


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column(
        "case",
        sa.Column("participants_team", sa.String()),
    )
    op.add_column(
        "case",
        sa.Column("participants_location", sa.String()),
    )
    op.add_column(
        "case",
        sa.Column("_assignee_id", sa.Integer()),
    )
    op.add_column(
        "participant",
        sa.Column("case_id", sa.Integer()),
    )

    print("Migrating case assignees to Participant from DispatchUser..")

    bind = op.get_bind()
    db_session = Session(bind=bind)

    for case in db_session.query(Case):
        print(f"Processing Case {case.id}...")
        if not is_participant(db_session, participant_id=case.assignee_id):
            current_user = (
                db_session.query(DispatchUser).filter(DispatchUser.id == case.assignee_id).first()
            )
            individual = (
                db_session.query(IndividualContact)
                .filter(IndividualContact.email == current_user.email)
                .first()
            )
            if individual is None:
                i = {}
                i["email"] = current_user.email
                i["name"] = current_user.email
                i["weblink"] = ""
                default_project = (
                    db_session.query(Project).filter(Project.default == true()).one_or_none()
                )
                individual = IndividualContact(
                    **i,
                    project=default_project if default_project else "default",
                )
                db_session.add(individual)

            participant = Participant(
                individual_contact_id=individual.id,
            )
            db_session.add(participant)
            db_session.commit()
            role = ParticipantRole(role=ParticipantRoleType.assignee)
            participant.participant_roles = role

            case._assignee_id = participant.id
            participant.case_id = case.id
            participant.individual_contact_id = individual.id

    db_session.commit()

    op.create_foreign_key(
        None, "participant", "case", ["case_id"], ["id"], ondelete="CASCADE", use_alter=True
    )
    op.drop_column("case", "assignee_id")
    op.alter_column("case", "_assignee_id", new_column_name="assignee_id")
    op.create_foreign_key(None, "case", "participant", ["assignee_id"], ["id"])