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"])