3 KiB
Data Model Timeline
This diagram connects the data models along with various workflow stages.
-
The applicant starts the process at
/register
interacting with theDomainApplication
object. -
The analyst approves the application using the
DomainApplication
'sapprove()
method which creates many related objects:UserDomainRole
,Domain
, andDomainInformation
. -
After the domain is approved, users interact with various
/domain/<id>/...
views which make changes to theDomain
,DomainInformation
, andUserDomainRole
models. For inviting new users, there is aDomainInvitation
model that allows people to be added to domains who are not already users.
A more complete diagram of the data models, their fields, and their
relationships are in models_diagram.md, created with
the django-model2puml
plugin.
![./model_timeline.svg]
PlantUML source code
```plantuml @startumlallowmixing left to right direction
class DomainApplication { Application for a domain
creator (User) investigator (User) authorizing_official (Contact) submitter (Contact) other_contacts (Contacts) requested_domain (Domain) current_websites (Websites) alternative_domains (Websites)
Request information... }
class User { Django's user class
...
} note left of User Created by DjangoOIDC when users arrive back from Login.gov
username is the Login UUID end note
DomainApplication -l- User : creator, investigator
class Contact { Contact info for a person
first_name middle_name last_name title email phone
}
DomainApplication -r- Contact : authorizing_official, submitter, other_contacts
class Domain { Approved domain
name is_active
EPP methods }
DomainApplication .right[#blue].> Domain : approve()
class DomainInformation { Registrar information on a domain
domain (Domain) domain_application (DomainApplication) security_email
Request information... }
DomainInformation -- Domain DomainInformation -- DomainApplication DomainApplication .[#blue].> DomainInformation : approve()
class UserDomainRole { Permissions
domain (Domain) user (User) role="ADMIN"
} UserDomainRole -- User UserDomainRole -- Domain DomainApplication .[#blue].> UserDomainRole : approve()
class DomainInvitation { Email invitations sent
email domain (Domain) status
} DomainInvitation -- Domain DomainInvitation .[#green].> UserDomainRole : User.first_login()
actor applicant #Red applicant -d-> DomainApplication : /register
actor analyst #Blue analyst -[#blue]-> DomainApplication : approve()
actor user1 #Green user1 -[#green]-> Domain : /domain//nameservers actor user2 #Green user2 -[#green]-> DomainInformation : /domain//????? actor user3 #Green user3 -right[#green]-> UserDomainRole : /domain//users/add user3 -right[#green]-> DomainInvitation : /domain//users/add
@enduml
</details>