From 86405b8814e806542eacf960d669466618702660 Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Fri, 31 May 2024 06:28:41 -0700 Subject: [PATCH 1/7] updated diagram and diagram generation documentation --- docs/architecture/diagrams/models_diagram.md | 4 +- src/models_diagram.puml | 358 +++++++++++++++++++ 2 files changed, 360 insertions(+), 2 deletions(-) create mode 100644 src/models_diagram.puml diff --git a/docs/architecture/diagrams/models_diagram.md b/docs/architecture/diagrams/models_diagram.md index df0e39b7e..20061bd07 100644 --- a/docs/architecture/diagrams/models_diagram.md +++ b/docs/architecture/diagrams/models_diagram.md @@ -5,9 +5,9 @@ This is an auto-generated diagram of our data models generated with the using the command ```bash -$ docker compose app ./manage.py generate_puml --include registrar +$ docker compose exec app ./manage.py generate_puml --include registrar ``` - +Note: You must uncomment `puml_generator` from `INSTALLED_APPS` in settings.py and docker-compose down and up before running the above command ![Complete data models diagram](./models_diagram.svg)
diff --git a/src/models_diagram.puml b/src/models_diagram.puml new file mode 100644 index 000000000..a58994642 --- /dev/null +++ b/src/models_diagram.puml @@ -0,0 +1,358 @@ +@startuml +class "registrar.Contact " as registrar.Contact #d6f4e9 { + contact + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + ~ user (OneToOneField) + + first_name (CharField) + + middle_name (CharField) + + last_name (CharField) + + title (CharField) + + email (EmailField) + + phone (PhoneNumberField) + -- +} +registrar.Contact -- registrar.User + + +class "registrar.Host " as registrar.Host #d6f4e9 { + host + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + name (CharField) + ~ domain (ForeignKey) + -- +} +registrar.Host -- registrar.Domain + + +class "registrar.HostIP " as registrar.HostIP #d6f4e9 { + host ip + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + address (CharField) + ~ host (ForeignKey) + -- +} +registrar.HostIP -- registrar.Host + + +class "registrar.PublicContact " as registrar.PublicContact #d6f4e9 { + public contact + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + contact_type (CharField) + + registry_id (CharField) + ~ domain (ForeignKey) + + name (CharField) + + org (CharField) + + street1 (CharField) + + street2 (CharField) + + street3 (CharField) + + city (CharField) + + sp (CharField) + + pc (CharField) + + cc (CharField) + + email (EmailField) + + voice (CharField) + + fax (CharField) + + pw (CharField) + -- +} +registrar.PublicContact -- registrar.Domain + + +class "registrar.Domain " as registrar.Domain #d6f4e9 { + domain + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + name (DomainField) + + state (FSMField) + + expiration_date (DateField) + + security_contact_registry_id (TextField) + + deleted (DateField) + + first_ready (DateField) + -- +} + + +class "registrar.FederalAgency " as registrar.FederalAgency #d6f4e9 { + Federal agency + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + agency (CharField) + -- +} + + +class "registrar.DomainRequest " as registrar.DomainRequest #d6f4e9 { + domain request + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + status (FSMField) + + rejection_reason (TextField) + ~ federal_agency (ForeignKey) + ~ creator (ForeignKey) + ~ investigator (ForeignKey) + + generic_org_type (CharField) + + is_election_board (BooleanField) + + organization_type (CharField) + + federally_recognized_tribe (BooleanField) + + state_recognized_tribe (BooleanField) + + tribe_name (CharField) + + federal_type (CharField) + + organization_name (CharField) + + address_line1 (CharField) + + address_line2 (CharField) + + city (CharField) + + state_territory (CharField) + + zipcode (CharField) + + urbanization (CharField) + + about_your_organization (TextField) + ~ authorizing_official (ForeignKey) + ~ approved_domain (OneToOneField) + ~ requested_domain (OneToOneField) + ~ submitter (ForeignKey) + + purpose (TextField) + + no_other_contacts_rationale (TextField) + + anything_else (TextField) + + has_anything_else_text (BooleanField) + + cisa_representative_email (EmailField) + + has_cisa_representative (BooleanField) + + is_policy_acknowledged (BooleanField) + + submission_date (DateField) + + notes (TextField) + # current_websites (ManyToManyField) + # alternative_domains (ManyToManyField) + # other_contacts (ManyToManyField) + -- +} +registrar.DomainRequest -- registrar.FederalAgency +registrar.DomainRequest -- registrar.User +registrar.DomainRequest -- registrar.User +registrar.DomainRequest -- registrar.Contact +registrar.DomainRequest -- registrar.Domain +registrar.DomainRequest -- registrar.DraftDomain +registrar.DomainRequest -- registrar.Contact +registrar.DomainRequest *--* registrar.Website +registrar.DomainRequest *--* registrar.Website +registrar.DomainRequest *--* registrar.Contact + + +class "registrar.DomainInformation " as registrar.DomainInformation #d6f4e9 { + domain information + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + ~ federal_agency (ForeignKey) + ~ creator (ForeignKey) + ~ domain_request (OneToOneField) + + generic_org_type (CharField) + + organization_type (CharField) + + federally_recognized_tribe (BooleanField) + + state_recognized_tribe (BooleanField) + + tribe_name (CharField) + + federal_type (CharField) + + is_election_board (BooleanField) + + organization_name (CharField) + + address_line1 (CharField) + + address_line2 (CharField) + + city (CharField) + + state_territory (CharField) + + zipcode (CharField) + + urbanization (CharField) + + about_your_organization (TextField) + ~ authorizing_official (ForeignKey) + ~ domain (OneToOneField) + ~ submitter (ForeignKey) + + purpose (TextField) + + no_other_contacts_rationale (TextField) + + anything_else (TextField) + + cisa_representative_email (EmailField) + + is_policy_acknowledged (BooleanField) + + notes (TextField) + # other_contacts (ManyToManyField) + -- +} +registrar.DomainInformation -- registrar.FederalAgency +registrar.DomainInformation -- registrar.User +registrar.DomainInformation -- registrar.DomainRequest +registrar.DomainInformation -- registrar.Contact +registrar.DomainInformation -- registrar.Domain +registrar.DomainInformation -- registrar.Contact +registrar.DomainInformation *--* registrar.Contact + + +class "registrar.DraftDomain " as registrar.DraftDomain #d6f4e9 { + draft domain + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + name (CharField) + -- +} + + +class "registrar.UserDomainRole " as registrar.UserDomainRole #d6f4e9 { + user domain role + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + ~ user (ForeignKey) + ~ domain (ForeignKey) + + role (TextField) + -- +} +registrar.UserDomainRole -- registrar.User +registrar.UserDomainRole -- registrar.Domain + + +class "registrar.DomainInvitation " as registrar.DomainInvitation #d6f4e9 { + domain invitation + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + email (EmailField) + ~ domain (ForeignKey) + + status (FSMField) + -- +} +registrar.DomainInvitation -- registrar.Domain + + +class "registrar.TransitionDomain " as registrar.TransitionDomain #d6f4e9 { + transition domain + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + username (CharField) + + domain_name (CharField) + + status (CharField) + + email_sent (BooleanField) + + processed (BooleanField) + + generic_org_type (CharField) + + organization_name (CharField) + + federal_type (CharField) + + federal_agency (CharField) + + epp_creation_date (DateField) + + epp_expiration_date (DateField) + + first_name (CharField) + + middle_name (CharField) + + last_name (CharField) + + title (CharField) + + email (EmailField) + + phone (CharField) + + address_line (CharField) + + city (CharField) + + state_territory (CharField) + + zipcode (CharField) + -- +} + + +class "registrar.VerifiedByStaff " as registrar.VerifiedByStaff #d6f4e9 { + verified by staff + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + email (EmailField) + ~ requestor (ForeignKey) + + notes (TextField) + -- +} +registrar.VerifiedByStaff -- registrar.User + + +class "registrar.User " as registrar.User #d6f4e9 { + user + -- + + id (BigAutoField) + + password (CharField) + + last_login (DateTimeField) + + is_superuser (BooleanField) + + username (CharField) + + first_name (CharField) + + last_name (CharField) + + email (EmailField) + + is_staff (BooleanField) + + is_active (BooleanField) + + date_joined (DateTimeField) + + status (CharField) + + phone (PhoneNumberField) + + middle_name (CharField) + + title (CharField) + + verification_type (CharField) + # groups (ManyToManyField) + # user_permissions (ManyToManyField) + # domains (ManyToManyField) + -- +} +registrar.User *--* registrar.Domain + + +class "registrar.UserGroup " as registrar.UserGroup #d6f4e9 { + User group + -- + - id (AutoField) + + name (CharField) + ~ group_ptr (OneToOneField) + # permissions (ManyToManyField) + -- +} + + +class "registrar.Website " as registrar.Website #d6f4e9 { + website + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + website (CharField) + -- +} + + +class "registrar.WaffleFlag " as registrar.WaffleFlag #d6f4e9 { + waffle flag + -- + + id (BigAutoField) + + name (CharField) + + everyone (BooleanField) + + percent (DecimalField) + + testing (BooleanField) + + superusers (BooleanField) + + staff (BooleanField) + + authenticated (BooleanField) + + languages (TextField) + + rollout (BooleanField) + + note (TextField) + + created (DateTimeField) + + modified (DateTimeField) + # groups (ManyToManyField) + # users (ManyToManyField) + -- +} +registrar.WaffleFlag *--* registrar.User + + +@enduml From f3acd126d5dcbae1ece78989747bcd1cbc804aec Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Fri, 31 May 2024 06:46:16 -0700 Subject: [PATCH 2/7] fixed documentation --- docs/architecture/diagrams/models_diagram.md | 290 +++++++++----- docs/architecture/diagrams/models_diagram.svg | 2 +- src/models_diagram.puml | 358 ------------------ 3 files changed, 197 insertions(+), 453 deletions(-) delete mode 100644 src/models_diagram.puml diff --git a/docs/architecture/diagrams/models_diagram.md b/docs/architecture/diagrams/models_diagram.md index 20061bd07..947dfcc95 100644 --- a/docs/architecture/diagrams/models_diagram.md +++ b/docs/architecture/diagrams/models_diagram.md @@ -1,24 +1,34 @@ # Complete model documentation This is an auto-generated diagram of our data models generated with the -[django-model2puml](https://github.com/sen-den/django-model2puml) library -using the command +[django-model2puml](https://github.com/sen-den/django-model2puml) library. + +## How to generate the puml + +1. Uncomment `puml_generator` from `INSTALLED_APPS` in settings.py and docker-compose down and up +2. Run the following command to generate a puml file ```bash -$ docker compose exec app ./manage.py generate_puml --include registrar +docker compose exec app ./manage.py generate_puml --include registrar ``` -Note: You must uncomment `puml_generator` from `INSTALLED_APPS` in settings.py and docker-compose down and up before running the above command + ![Complete data models diagram](./models_diagram.svg)
PlantUML source code -To regenerate this image using Docker, run +## How To regenerate the database svg image + +1. Copy your puml file contents into the bottom of this file and replace the current code marked by `plantuml` +2. Run the following command ```bash -$ docker run -v $(pwd):$(pwd) -w $(pwd) -it plantuml/plantuml -tsvg models_diagram.md +docker run -v $(pwd):$(pwd) -w $(pwd) -it plantuml/plantuml -tsvg models_diagram.md ``` +3. Remove the puml file from earlier if you still have it and commit the image and this md file + + ```plantuml @startuml class "registrar.Contact " as registrar.Contact #d6f4e9 { @@ -28,17 +38,97 @@ class "registrar.Contact " as registrar.Contact #d6f4e9 { + created_at (DateTimeField) + updated_at (DateTimeField) ~ user (OneToOneField) - + first_name (TextField) - + middle_name (TextField) - + last_name (TextField) - + title (TextField) - + email (TextField) + + first_name (CharField) + + middle_name (CharField) + + last_name (CharField) + + title (CharField) + + email (EmailField) + phone (PhoneNumberField) -- } registrar.Contact -- registrar.User +class "registrar.Host " as registrar.Host #d6f4e9 { + host + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + name (CharField) + ~ domain (ForeignKey) + -- +} +registrar.Host -- registrar.Domain + + +class "registrar.HostIP " as registrar.HostIP #d6f4e9 { + host ip + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + address (CharField) + ~ host (ForeignKey) + -- +} +registrar.HostIP -- registrar.Host + + +class "registrar.PublicContact " as registrar.PublicContact #d6f4e9 { + public contact + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + contact_type (CharField) + + registry_id (CharField) + ~ domain (ForeignKey) + + name (CharField) + + org (CharField) + + street1 (CharField) + + street2 (CharField) + + street3 (CharField) + + city (CharField) + + sp (CharField) + + pc (CharField) + + cc (CharField) + + email (EmailField) + + voice (CharField) + + fax (CharField) + + pw (CharField) + -- +} +registrar.PublicContact -- registrar.Domain + + +class "registrar.Domain " as registrar.Domain #d6f4e9 { + domain + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + name (DomainField) + + state (FSMField) + + expiration_date (DateField) + + security_contact_registry_id (TextField) + + deleted (DateField) + + first_ready (DateField) + -- +} + + +class "registrar.FederalAgency " as registrar.FederalAgency #d6f4e9 { + Federal agency + -- + + id (BigAutoField) + + created_at (DateTimeField) + + updated_at (DateTimeField) + + agency (CharField) + -- +} + + class "registrar.DomainRequest " as registrar.DomainRequest #d6f4e9 { domain request -- @@ -46,24 +136,25 @@ class "registrar.DomainRequest " as registrar.DomainRequest #d6f4e9 { + created_at (DateTimeField) + updated_at (DateTimeField) + status (FSMField) + + rejection_reason (TextField) + ~ federal_agency (ForeignKey) ~ creator (ForeignKey) ~ investigator (ForeignKey) + + generic_org_type (CharField) + + is_election_board (BooleanField) + organization_type (CharField) + federally_recognized_tribe (BooleanField) + state_recognized_tribe (BooleanField) - + tribe_name (TextField) - + federal_agency (TextField) + + tribe_name (CharField) + federal_type (CharField) - + is_election_board (BooleanField) - + organization_name (TextField) - + address_line1 (TextField) + + organization_name (CharField) + + address_line1 (CharField) + address_line2 (CharField) - + city (TextField) + + city (CharField) + state_territory (CharField) + zipcode (CharField) - + urbanization (TextField) - + type_of_work (TextField) - + more_organization_information (TextField) + + urbanization (CharField) + + about_your_organization (TextField) ~ authorizing_official (ForeignKey) ~ approved_domain (OneToOneField) ~ requested_domain (OneToOneField) @@ -71,17 +162,23 @@ class "registrar.DomainRequest " as registrar.DomainRequest #d6f4e9 { + purpose (TextField) + no_other_contacts_rationale (TextField) + anything_else (TextField) + + has_anything_else_text (BooleanField) + + cisa_representative_email (EmailField) + + has_cisa_representative (BooleanField) + is_policy_acknowledged (BooleanField) + + submission_date (DateField) + + notes (TextField) # current_websites (ManyToManyField) # alternative_domains (ManyToManyField) # other_contacts (ManyToManyField) -- } +registrar.DomainRequest -- registrar.FederalAgency registrar.DomainRequest -- registrar.User registrar.DomainRequest -- registrar.User registrar.DomainRequest -- registrar.Contact -registrar.DomainRequest -- registrar.DraftDomain registrar.DomainRequest -- registrar.Domain +registrar.DomainRequest -- registrar.DraftDomain registrar.DomainRequest -- registrar.Contact registrar.DomainRequest *--* registrar.Website registrar.DomainRequest *--* registrar.Website @@ -94,35 +191,37 @@ class "registrar.DomainInformation " as registrar.DomainInformation # + id (BigAutoField) + created_at (DateTimeField) + updated_at (DateTimeField) + ~ federal_agency (ForeignKey) ~ creator (ForeignKey) ~ domain_request (OneToOneField) + + generic_org_type (CharField) + organization_type (CharField) + federally_recognized_tribe (BooleanField) + state_recognized_tribe (BooleanField) - + tribe_name (TextField) - + federal_agency (TextField) + + tribe_name (CharField) + federal_type (CharField) + is_election_board (BooleanField) - + organization_name (TextField) - + address_line1 (TextField) + + organization_name (CharField) + + address_line1 (CharField) + address_line2 (CharField) - + city (TextField) + + city (CharField) + state_territory (CharField) + zipcode (CharField) - + urbanization (TextField) - + type_of_work (TextField) - + more_organization_information (TextField) + + urbanization (CharField) + + about_your_organization (TextField) ~ authorizing_official (ForeignKey) ~ domain (OneToOneField) ~ submitter (ForeignKey) + purpose (TextField) + no_other_contacts_rationale (TextField) + anything_else (TextField) + + cisa_representative_email (EmailField) + is_policy_acknowledged (BooleanField) - + security_email (EmailField) + + notes (TextField) # other_contacts (ManyToManyField) -- } +registrar.DomainInformation -- registrar.FederalAgency registrar.DomainInformation -- registrar.User registrar.DomainInformation -- registrar.DomainRequest registrar.DomainInformation -- registrar.Contact @@ -142,43 +241,6 @@ class "registrar.DraftDomain " as registrar.DraftDomain #d6f4e9 { } -class "registrar.Domain " as registrar.Domain #d6f4e9 { - domain - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + name (CharField) - -- -} - - -class "registrar.HostIP " as registrar.HostIP #d6f4e9 { - host ip - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + address (CharField) - ~ host (ForeignKey) - -- -} -registrar.HostIP -- registrar.Host - - -class "registrar.Host " as registrar.Host #d6f4e9 { - host - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + name (CharField) - ~ domain (ForeignKey) - -- -} -registrar.Host -- registrar.Domain - - class "registrar.UserDomainRole " as registrar.UserDomainRole #d6f4e9 { user domain role -- @@ -208,47 +270,49 @@ class "registrar.DomainInvitation " as registrar.DomainInvitation #d6 registrar.DomainInvitation -- registrar.Domain -class "registrar.Nameserver " as registrar.Nameserver #d6f4e9 { - nameserver +class "registrar.TransitionDomain " as registrar.TransitionDomain #d6f4e9 { + transition domain -- + id (BigAutoField) + created_at (DateTimeField) + updated_at (DateTimeField) - + name (CharField) - ~ domain (ForeignKey) - ~ host_ptr (OneToOneField) + + username (CharField) + + domain_name (CharField) + + status (CharField) + + email_sent (BooleanField) + + processed (BooleanField) + + generic_org_type (CharField) + + organization_name (CharField) + + federal_type (CharField) + + federal_agency (CharField) + + epp_creation_date (DateField) + + epp_expiration_date (DateField) + + first_name (CharField) + + middle_name (CharField) + + last_name (CharField) + + title (CharField) + + email (EmailField) + + phone (CharField) + + address_line (CharField) + + city (CharField) + + state_territory (CharField) + + zipcode (CharField) -- } -registrar.Nameserver -- registrar.Domain -registrar.Nameserver -- registrar.Host -class "registrar.PublicContact " as registrar.PublicContact #d6f4e9 { - public contact +class "registrar.VerifiedByStaff " as registrar.VerifiedByStaff #d6f4e9 { + verified by staff -- + id (BigAutoField) + created_at (DateTimeField) + updated_at (DateTimeField) - + contact_type (CharField) - + registry_id (CharField) - ~ domain (ForeignKey) - + name (TextField) - + org (TextField) - + street1 (TextField) - + street2 (TextField) - + street3 (TextField) - + city (TextField) - + sp (TextField) - + pc (TextField) - + cc (TextField) - + email (TextField) - + voice (TextField) - + fax (TextField) - + pw (TextField) + + email (EmailField) + ~ requestor (ForeignKey) + + notes (TextField) -- } - -registrar.PublicContact -- registrar.Domain +registrar.VerifiedByStaff -- registrar.User class "registrar.User " as registrar.User #d6f4e9 { @@ -265,7 +329,11 @@ class "registrar.User " as registrar.User #d6f4e9 { + is_staff (BooleanField) + is_active (BooleanField) + date_joined (DateTimeField) + + status (CharField) + phone (PhoneNumberField) + + middle_name (CharField) + + title (CharField) + + verification_type (CharField) # groups (ManyToManyField) # user_permissions (ManyToManyField) # domains (ManyToManyField) @@ -274,6 +342,17 @@ class "registrar.User " as registrar.User #d6f4e9 { registrar.User *--* registrar.Domain +class "registrar.UserGroup " as registrar.UserGroup #d6f4e9 { + User group + -- + - id (AutoField) + + name (CharField) + ~ group_ptr (OneToOneField) + # permissions (ManyToManyField) + -- +} + + class "registrar.Website " as registrar.Website #d6f4e9 { website -- @@ -285,6 +364,29 @@ class "registrar.Website " as registrar.Website #d6f4e9 { } +class "registrar.WaffleFlag " as registrar.WaffleFlag #d6f4e9 { + waffle flag + -- + + id (BigAutoField) + + name (CharField) + + everyone (BooleanField) + + percent (DecimalField) + + testing (BooleanField) + + superusers (BooleanField) + + staff (BooleanField) + + authenticated (BooleanField) + + languages (TextField) + + rollout (BooleanField) + + note (TextField) + + created (DateTimeField) + + modified (DateTimeField) + # groups (ManyToManyField) + # users (ManyToManyField) + -- +} +registrar.WaffleFlag *--* registrar.User + + @enduml ``` diff --git a/docs/architecture/diagrams/models_diagram.svg b/docs/architecture/diagrams/models_diagram.svg index 49999454c..3fbc7dc10 100644 --- a/docs/architecture/diagrams/models_diagram.svg +++ b/docs/architecture/diagrams/models_diagram.svg @@ -1 +1 @@ -registrarregistrar.ContactRegistrarcontactid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)user (OneToOneField)first_name (TextField)middle_name (TextField)last_name (TextField)title (TextField)email (TextField)phone (PhoneNumberField)registrar.UserRegistraruserid (BigAutoField)password (CharField)last_login (DateTimeField)is_superuser (BooleanField)username (CharField)first_name (CharField)last_name (CharField)email (EmailField)is_staff (BooleanField)is_active (BooleanField)date_joined (DateTimeField)phone (PhoneNumberField)groups (ManyToManyField)user_permissions (ManyToManyField)domains (ManyToManyField)registrar.DomainRequestRegistrardomain requestid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)status (FSMField)creator (ForeignKey)investigator (ForeignKey)organization_type (CharField)federally_recognized_tribe (BooleanField)state_recognized_tribe (BooleanField)tribe_name (TextField)federal_agency (TextField)federal_type (CharField)is_election_board (BooleanField)organization_name (TextField)address_line1 (TextField)address_line2 (CharField)city (TextField)state_territory (CharField)zipcode (CharField)urbanization (TextField)type_of_work (TextField)more_organization_information (TextField)authorizing_official (ForeignKey)approved_domain (OneToOneField)requested_domain (OneToOneField)submitter (ForeignKey)purpose (TextField)no_other_contacts_rationale (TextField)anything_else (TextField)is_policy_acknowledged (BooleanField)current_websites (ManyToManyField)alternative_domains (ManyToManyField)other_contacts (ManyToManyField)registrar.DraftDomainRegistrardraft domainid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)registrar.DomainRegistrardomainid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)registrar.WebsiteRegistrarwebsiteid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)website (CharField)registrar.DomainInformationRegistrardomain informationid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)creator (ForeignKey)domain_request (OneToOneField)organization_type (CharField)federally_recognized_tribe (BooleanField)state_recognized_tribe (BooleanField)tribe_name (TextField)federal_agency (TextField)federal_type (CharField)is_election_board (BooleanField)organization_name (TextField)address_line1 (TextField)address_line2 (CharField)city (TextField)state_territory (CharField)zipcode (CharField)urbanization (TextField)type_of_work (TextField)more_organization_information (TextField)authorizing_official (ForeignKey)domain (OneToOneField)submitter (ForeignKey)purpose (TextField)no_other_contacts_rationale (TextField)anything_else (TextField)is_policy_acknowledged (BooleanField)security_email (EmailField)other_contacts (ManyToManyField)registrar.HostIPRegistrarhost ipid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)address (CharField)host (ForeignKey)registrar.HostRegistrarhostid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)domain (ForeignKey)registrar.UserDomainRoleRegistraruser domain roleid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)user (ForeignKey)domain (ForeignKey)role (TextField)registrar.DomainInvitationRegistrardomain invitationid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)email (EmailField)domain (ForeignKey)status (FSMField)registrar.NameserverRegistrarnameserverid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)domain (ForeignKey)host_ptr (OneToOneField)registrar.PublicContactRegistrarpublic contactid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)contact_type (CharField)registry_id (CharField)domain (ForeignKey)name (TextField)org (TextField)street1 (TextField)street2 (TextField)street3 (TextField)city (TextField)sp (TextField)pc (TextField)cc (TextField)email (TextField)voice (TextField)fax (TextField)pw (TextField) \ No newline at end of file +registrarregistrar.ContactRegistrarcontactid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)user (OneToOneField)first_name (CharField)middle_name (CharField)last_name (CharField)title (CharField)email (EmailField)phone (PhoneNumberField)registrar.UserRegistraruserid (BigAutoField)password (CharField)last_login (DateTimeField)is_superuser (BooleanField)username (CharField)first_name (CharField)last_name (CharField)email (EmailField)is_staff (BooleanField)is_active (BooleanField)date_joined (DateTimeField)status (CharField)phone (PhoneNumberField)middle_name (CharField)title (CharField)verification_type (CharField)groups (ManyToManyField)user_permissions (ManyToManyField)domains (ManyToManyField)registrar.HostRegistrarhostid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)domain (ForeignKey)registrar.DomainRegistrardomainid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (DomainField)state (FSMField)expiration_date (DateField)security_contact_registry_id (TextField)deleted (DateField)first_ready (DateField)registrar.HostIPRegistrarhost ipid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)address (CharField)host (ForeignKey)registrar.PublicContactRegistrarpublic contactid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)contact_type (CharField)registry_id (CharField)domain (ForeignKey)name (CharField)org (CharField)street1 (CharField)street2 (CharField)street3 (CharField)city (CharField)sp (CharField)pc (CharField)cc (CharField)email (EmailField)voice (CharField)fax (CharField)pw (CharField)registrar.FederalAgencyRegistrarFederal agencyid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)agency (CharField)registrar.DomainRequestRegistrardomain requestid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)status (FSMField)rejection_reason (TextField)federal_agency (ForeignKey)creator (ForeignKey)investigator (ForeignKey)generic_org_type (CharField)is_election_board (BooleanField)organization_type (CharField)federally_recognized_tribe (BooleanField)state_recognized_tribe (BooleanField)tribe_name (CharField)federal_type (CharField)organization_name (CharField)address_line1 (CharField)address_line2 (CharField)city (CharField)state_territory (CharField)zipcode (CharField)urbanization (CharField)about_your_organization (TextField)authorizing_official (ForeignKey)approved_domain (OneToOneField)requested_domain (OneToOneField)submitter (ForeignKey)purpose (TextField)no_other_contacts_rationale (TextField)anything_else (TextField)has_anything_else_text (BooleanField)cisa_representative_email (EmailField)has_cisa_representative (BooleanField)is_policy_acknowledged (BooleanField)submission_date (DateField)notes (TextField)current_websites (ManyToManyField)alternative_domains (ManyToManyField)other_contacts (ManyToManyField)registrar.DraftDomainRegistrardraft domainid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)name (CharField)registrar.WebsiteRegistrarwebsiteid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)website (CharField)registrar.DomainInformationRegistrardomain informationid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)federal_agency (ForeignKey)creator (ForeignKey)domain_request (OneToOneField)generic_org_type (CharField)organization_type (CharField)federally_recognized_tribe (BooleanField)state_recognized_tribe (BooleanField)tribe_name (CharField)federal_type (CharField)is_election_board (BooleanField)organization_name (CharField)address_line1 (CharField)address_line2 (CharField)city (CharField)state_territory (CharField)zipcode (CharField)urbanization (CharField)about_your_organization (TextField)authorizing_official (ForeignKey)domain (OneToOneField)submitter (ForeignKey)purpose (TextField)no_other_contacts_rationale (TextField)anything_else (TextField)cisa_representative_email (EmailField)is_policy_acknowledged (BooleanField)notes (TextField)other_contacts (ManyToManyField)registrar.UserDomainRoleRegistraruser domain roleid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)user (ForeignKey)domain (ForeignKey)role (TextField)registrar.DomainInvitationRegistrardomain invitationid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)email (EmailField)domain (ForeignKey)status (FSMField)registrar.TransitionDomainRegistrartransition domainid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)username (CharField)domain_name (CharField)status (CharField)email_sent (BooleanField)processed (BooleanField)generic_org_type (CharField)organization_name (CharField)federal_type (CharField)federal_agency (CharField)epp_creation_date (DateField)epp_expiration_date (DateField)first_name (CharField)middle_name (CharField)last_name (CharField)title (CharField)email (EmailField)phone (CharField)address_line (CharField)city (CharField)state_territory (CharField)zipcode (CharField)registrar.VerifiedByStaffRegistrarverified by staffid (BigAutoField)created_at (DateTimeField)updated_at (DateTimeField)email (EmailField)requestor (ForeignKey)notes (TextField)registrar.UserGroupRegistrarUser groupid (AutoField)name (CharField)group_ptr (OneToOneField)permissions (ManyToManyField)registrar.WaffleFlagRegistrarwaffle flagid (BigAutoField)name (CharField)everyone (BooleanField)percent (DecimalField)testing (BooleanField)superusers (BooleanField)staff (BooleanField)authenticated (BooleanField)languages (TextField)rollout (BooleanField)note (TextField)created (DateTimeField)modified (DateTimeField)groups (ManyToManyField)users (ManyToManyField) \ No newline at end of file diff --git a/src/models_diagram.puml b/src/models_diagram.puml deleted file mode 100644 index a58994642..000000000 --- a/src/models_diagram.puml +++ /dev/null @@ -1,358 +0,0 @@ -@startuml -class "registrar.Contact " as registrar.Contact #d6f4e9 { - contact - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - ~ user (OneToOneField) - + first_name (CharField) - + middle_name (CharField) - + last_name (CharField) - + title (CharField) - + email (EmailField) - + phone (PhoneNumberField) - -- -} -registrar.Contact -- registrar.User - - -class "registrar.Host " as registrar.Host #d6f4e9 { - host - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + name (CharField) - ~ domain (ForeignKey) - -- -} -registrar.Host -- registrar.Domain - - -class "registrar.HostIP " as registrar.HostIP #d6f4e9 { - host ip - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + address (CharField) - ~ host (ForeignKey) - -- -} -registrar.HostIP -- registrar.Host - - -class "registrar.PublicContact " as registrar.PublicContact #d6f4e9 { - public contact - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + contact_type (CharField) - + registry_id (CharField) - ~ domain (ForeignKey) - + name (CharField) - + org (CharField) - + street1 (CharField) - + street2 (CharField) - + street3 (CharField) - + city (CharField) - + sp (CharField) - + pc (CharField) - + cc (CharField) - + email (EmailField) - + voice (CharField) - + fax (CharField) - + pw (CharField) - -- -} -registrar.PublicContact -- registrar.Domain - - -class "registrar.Domain " as registrar.Domain #d6f4e9 { - domain - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + name (DomainField) - + state (FSMField) - + expiration_date (DateField) - + security_contact_registry_id (TextField) - + deleted (DateField) - + first_ready (DateField) - -- -} - - -class "registrar.FederalAgency " as registrar.FederalAgency #d6f4e9 { - Federal agency - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + agency (CharField) - -- -} - - -class "registrar.DomainRequest " as registrar.DomainRequest #d6f4e9 { - domain request - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + status (FSMField) - + rejection_reason (TextField) - ~ federal_agency (ForeignKey) - ~ creator (ForeignKey) - ~ investigator (ForeignKey) - + generic_org_type (CharField) - + is_election_board (BooleanField) - + organization_type (CharField) - + federally_recognized_tribe (BooleanField) - + state_recognized_tribe (BooleanField) - + tribe_name (CharField) - + federal_type (CharField) - + organization_name (CharField) - + address_line1 (CharField) - + address_line2 (CharField) - + city (CharField) - + state_territory (CharField) - + zipcode (CharField) - + urbanization (CharField) - + about_your_organization (TextField) - ~ authorizing_official (ForeignKey) - ~ approved_domain (OneToOneField) - ~ requested_domain (OneToOneField) - ~ submitter (ForeignKey) - + purpose (TextField) - + no_other_contacts_rationale (TextField) - + anything_else (TextField) - + has_anything_else_text (BooleanField) - + cisa_representative_email (EmailField) - + has_cisa_representative (BooleanField) - + is_policy_acknowledged (BooleanField) - + submission_date (DateField) - + notes (TextField) - # current_websites (ManyToManyField) - # alternative_domains (ManyToManyField) - # other_contacts (ManyToManyField) - -- -} -registrar.DomainRequest -- registrar.FederalAgency -registrar.DomainRequest -- registrar.User -registrar.DomainRequest -- registrar.User -registrar.DomainRequest -- registrar.Contact -registrar.DomainRequest -- registrar.Domain -registrar.DomainRequest -- registrar.DraftDomain -registrar.DomainRequest -- registrar.Contact -registrar.DomainRequest *--* registrar.Website -registrar.DomainRequest *--* registrar.Website -registrar.DomainRequest *--* registrar.Contact - - -class "registrar.DomainInformation " as registrar.DomainInformation #d6f4e9 { - domain information - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - ~ federal_agency (ForeignKey) - ~ creator (ForeignKey) - ~ domain_request (OneToOneField) - + generic_org_type (CharField) - + organization_type (CharField) - + federally_recognized_tribe (BooleanField) - + state_recognized_tribe (BooleanField) - + tribe_name (CharField) - + federal_type (CharField) - + is_election_board (BooleanField) - + organization_name (CharField) - + address_line1 (CharField) - + address_line2 (CharField) - + city (CharField) - + state_territory (CharField) - + zipcode (CharField) - + urbanization (CharField) - + about_your_organization (TextField) - ~ authorizing_official (ForeignKey) - ~ domain (OneToOneField) - ~ submitter (ForeignKey) - + purpose (TextField) - + no_other_contacts_rationale (TextField) - + anything_else (TextField) - + cisa_representative_email (EmailField) - + is_policy_acknowledged (BooleanField) - + notes (TextField) - # other_contacts (ManyToManyField) - -- -} -registrar.DomainInformation -- registrar.FederalAgency -registrar.DomainInformation -- registrar.User -registrar.DomainInformation -- registrar.DomainRequest -registrar.DomainInformation -- registrar.Contact -registrar.DomainInformation -- registrar.Domain -registrar.DomainInformation -- registrar.Contact -registrar.DomainInformation *--* registrar.Contact - - -class "registrar.DraftDomain " as registrar.DraftDomain #d6f4e9 { - draft domain - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + name (CharField) - -- -} - - -class "registrar.UserDomainRole " as registrar.UserDomainRole #d6f4e9 { - user domain role - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - ~ user (ForeignKey) - ~ domain (ForeignKey) - + role (TextField) - -- -} -registrar.UserDomainRole -- registrar.User -registrar.UserDomainRole -- registrar.Domain - - -class "registrar.DomainInvitation " as registrar.DomainInvitation #d6f4e9 { - domain invitation - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + email (EmailField) - ~ domain (ForeignKey) - + status (FSMField) - -- -} -registrar.DomainInvitation -- registrar.Domain - - -class "registrar.TransitionDomain " as registrar.TransitionDomain #d6f4e9 { - transition domain - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + username (CharField) - + domain_name (CharField) - + status (CharField) - + email_sent (BooleanField) - + processed (BooleanField) - + generic_org_type (CharField) - + organization_name (CharField) - + federal_type (CharField) - + federal_agency (CharField) - + epp_creation_date (DateField) - + epp_expiration_date (DateField) - + first_name (CharField) - + middle_name (CharField) - + last_name (CharField) - + title (CharField) - + email (EmailField) - + phone (CharField) - + address_line (CharField) - + city (CharField) - + state_territory (CharField) - + zipcode (CharField) - -- -} - - -class "registrar.VerifiedByStaff " as registrar.VerifiedByStaff #d6f4e9 { - verified by staff - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + email (EmailField) - ~ requestor (ForeignKey) - + notes (TextField) - -- -} -registrar.VerifiedByStaff -- registrar.User - - -class "registrar.User " as registrar.User #d6f4e9 { - user - -- - + id (BigAutoField) - + password (CharField) - + last_login (DateTimeField) - + is_superuser (BooleanField) - + username (CharField) - + first_name (CharField) - + last_name (CharField) - + email (EmailField) - + is_staff (BooleanField) - + is_active (BooleanField) - + date_joined (DateTimeField) - + status (CharField) - + phone (PhoneNumberField) - + middle_name (CharField) - + title (CharField) - + verification_type (CharField) - # groups (ManyToManyField) - # user_permissions (ManyToManyField) - # domains (ManyToManyField) - -- -} -registrar.User *--* registrar.Domain - - -class "registrar.UserGroup " as registrar.UserGroup #d6f4e9 { - User group - -- - - id (AutoField) - + name (CharField) - ~ group_ptr (OneToOneField) - # permissions (ManyToManyField) - -- -} - - -class "registrar.Website " as registrar.Website #d6f4e9 { - website - -- - + id (BigAutoField) - + created_at (DateTimeField) - + updated_at (DateTimeField) - + website (CharField) - -- -} - - -class "registrar.WaffleFlag " as registrar.WaffleFlag #d6f4e9 { - waffle flag - -- - + id (BigAutoField) - + name (CharField) - + everyone (BooleanField) - + percent (DecimalField) - + testing (BooleanField) - + superusers (BooleanField) - + staff (BooleanField) - + authenticated (BooleanField) - + languages (TextField) - + rollout (BooleanField) - + note (TextField) - + created (DateTimeField) - + modified (DateTimeField) - # groups (ManyToManyField) - # users (ManyToManyField) - -- -} -registrar.WaffleFlag *--* registrar.User - - -@enduml From 98047797fa4d100cf787d943e42ae007012f2d2a Mon Sep 17 00:00:00 2001 From: Rebecca Hsieh Date: Mon, 10 Jun 2024 11:38:23 -0700 Subject: [PATCH 3/7] Add in check for school district --- src/registrar/models/domain_request.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index 994fd85eb..d00841041 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -1065,6 +1065,8 @@ class DomainRequest(TimeStampedModel): is_complete = self._is_city_complete() case DomainRequest.OrganizationChoices.SPECIAL_DISTRICT: is_complete = self._is_special_district_complete() + case DomainRequest.OrganizationChoices.SCHOOL_DISTRICT: + is_complete = True case _: # NOTE: Shouldn't happen, this is only if somehow they didn't choose an org type is_complete = False From 480a590de48b01b7fd8c7bba247d0e7c96a31ea1 Mon Sep 17 00:00:00 2001 From: Alysia Broddrick <109625347+abroddrick@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:23:55 -0700 Subject: [PATCH 4/7] Update docs/architecture/diagrams/models_diagram.md Co-authored-by: zandercymatics <141044360+zandercymatics@users.noreply.github.com> --- docs/architecture/diagrams/models_diagram.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/architecture/diagrams/models_diagram.md b/docs/architecture/diagrams/models_diagram.md index 947dfcc95..837906934 100644 --- a/docs/architecture/diagrams/models_diagram.md +++ b/docs/architecture/diagrams/models_diagram.md @@ -26,7 +26,8 @@ docker compose exec app ./manage.py generate_puml --include registrar docker run -v $(pwd):$(pwd) -w $(pwd) -it plantuml/plantuml -tsvg models_diagram.md ``` -3. Remove the puml file from earlier if you still have it and commit the image and this md file +3. Remove the puml file from earlier (if you still have it) +4. Commit the new image and the md file ```plantuml From 3c2800f6f36cf4a8f87a4f4e6fc2e2afdc550645 Mon Sep 17 00:00:00 2001 From: zandercymatics <141044360+zandercymatics@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:33:44 -0600 Subject: [PATCH 5/7] Add anna --- src/registrar/fixtures_users.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/registrar/fixtures_users.py b/src/registrar/fixtures_users.py index c31acacfd..57601b2d7 100644 --- a/src/registrar/fixtures_users.py +++ b/src/registrar/fixtures_users.py @@ -106,6 +106,12 @@ class UserFixture: "last_name": "Orr", "email": "riley+320@truss.works", }, + { + "username": "76612d84-66b0-4ae9-9870-81e98b9858b6", + "first_name": "Anna", + "last_name": "Gingle", + "email": "annagingle@truss.works", + }, ] STAFF = [ @@ -194,6 +200,12 @@ class UserFixture: "last_name": "Orr-Analyst", "email": "riley+321@truss.works", }, + { + "username": "e1e350b1-cfc1-4753-a6cb-3ae6d912f99c", + "first_name": "Anna", + "last_name": "Gingle", + "email": "annagingle+analyst@truss.works", + }, ] def load_users(cls, users, group_name, are_superusers=False): From 7bc9ebcfd7c207dabdd74c5da3877be3113564b5 Mon Sep 17 00:00:00 2001 From: zandercymatics <141044360+zandercymatics@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:36:57 -0600 Subject: [PATCH 6/7] Update src/registrar/fixtures_users.py Co-authored-by: Alysia Broddrick <109625347+abroddrick@users.noreply.github.com> --- src/registrar/fixtures_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registrar/fixtures_users.py b/src/registrar/fixtures_users.py index 57601b2d7..f111e8518 100644 --- a/src/registrar/fixtures_users.py +++ b/src/registrar/fixtures_users.py @@ -202,7 +202,7 @@ class UserFixture: }, { "username": "e1e350b1-cfc1-4753-a6cb-3ae6d912f99c", - "first_name": "Anna", + "first_name": "Anna-Analyst", "last_name": "Gingle", "email": "annagingle+analyst@truss.works", }, From fd72a64babfd98fcb411e1d112767c94a3984bab Mon Sep 17 00:00:00 2001 From: zandercymatics <141044360+zandercymatics@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:37:04 -0600 Subject: [PATCH 7/7] Update src/registrar/fixtures_users.py Co-authored-by: Alysia Broddrick <109625347+abroddrick@users.noreply.github.com> --- src/registrar/fixtures_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registrar/fixtures_users.py b/src/registrar/fixtures_users.py index f111e8518..2aa9d224b 100644 --- a/src/registrar/fixtures_users.py +++ b/src/registrar/fixtures_users.py @@ -203,7 +203,7 @@ class UserFixture: { "username": "e1e350b1-cfc1-4753-a6cb-3ae6d912f99c", "first_name": "Anna-Analyst", - "last_name": "Gingle", + "last_name": "Gingle-Analyst", "email": "annagingle+analyst@truss.works", }, ]