Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.

Commit 00cba5f

Browse files
authored
fully resolves unknown individual (#2951)
1 parent 1681fb6 commit 00cba5f

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

src/dispatch/database/revisions/tenant/versions/2023-01-30_e4b4991dddcd.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
from enum import Enum
1111
from pydantic import BaseModel
1212
import sqlalchemy as sa
13-
from sqlalchemy.orm import Session
13+
from sqlalchemy.orm import Session, relationship
14+
from sqlalchemy.sql.expression import true
15+
from sqlalchemy.ext.declarative import declared_attr
1416
from sqlalchemy.ext.declarative import declarative_base
1517
from typing import Optional
1618

@@ -31,6 +33,13 @@ class DispatchUser(Base):
3133
email = sa.Column(sa.String)
3234

3335

36+
class Project(Base):
37+
__tablename__ = "project"
38+
id = sa.Column(sa.Integer, primary_key=True)
39+
name = sa.Column(sa.String)
40+
default = sa.Column(sa.Boolean, default=False)
41+
42+
3443
class Case(Base):
3544
__tablename__ = "case"
3645
id = sa.Column(sa.Integer, primary_key=True)
@@ -72,11 +81,25 @@ class ParticipantRoleCreate(ParticipantRoleBase):
7281
role: Optional[ParticipantRoleType]
7382

7483

75-
class IndividualContact(Base):
84+
class ProjectMixin(object):
85+
"""Project mixin"""
86+
87+
@declared_attr
88+
def project_id(cls): # noqa
89+
return sa.Column(sa.Integer, sa.ForeignKey("project.id", ondelete="CASCADE"))
90+
91+
@declared_attr
92+
def project(cls): # noqa
93+
return relationship("Project")
94+
95+
96+
class IndividualContact(Base, ProjectMixin):
7697
__tablename__ = "individual_contact"
7798

7899
id = sa.Column(sa.Integer, primary_key=True)
79100
email = sa.Column(sa.String)
101+
name = sa.Column(sa.String)
102+
weblink = sa.Column(sa.String)
80103

81104

82105
class Participant(Base):
@@ -130,6 +153,19 @@ def upgrade():
130153
.filter(IndividualContact.email == current_user.email)
131154
.first()
132155
)
156+
if individual is None:
157+
i = {}
158+
i["email"] = current_user.email
159+
i["name"] = current_user.email
160+
i["weblink"] = ""
161+
default_project = (
162+
db_session.query(Project).filter(Project.default == true()).one_or_none()
163+
)
164+
individual = IndividualContact(
165+
**i,
166+
project=default_project if default_project else "default",
167+
)
168+
db_session.add(individual)
133169

134170
participant = Participant(
135171
individual_contact_id=individual.id,

0 commit comments

Comments
 (0)