manage.get.gov/docs/architecture/diagrams/model_timeline.md
2023-05-12 15:07:02 -05:00

3 KiB

Data Model Timeline

This diagram connects the data models along with various workflow stages.

  1. The applicant starts the process at /register interacting with the DomainApplication object.

  2. The analyst approves the application using the DomainApplication's approve() method which creates many related objects: UserDomainRole, Domain, and DomainInformation.

  3. After the domain is approved, users interact with various /domain/<id>/... views which make changes to the Domain, DomainInformation, and UserDomainRole models. For inviting new users, there is a DomainInvitation 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 @startuml

allowmixing 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>