2026-04-06 12:41:49 +01:00
|
|
|
"""
|
|
|
|
|
Pydantic models for organisation module
|
|
|
|
|
|
2026-05-28 14:23:36 +01:00
|
|
|
Models follow the nomenclature of:
|
|
|
|
|
- Sub-models: "<Resource><Opt:>Schema"
|
|
|
|
|
- Models: "<Module><Method><Resource><Opt:Resource><Direction>" ie "OrgPostOrgRequest"
|
2026-04-06 12:41:49 +01:00
|
|
|
"""
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-19 12:55:46 +01:00
|
|
|
from typing import Optional
|
2026-06-11 12:24:36 +01:00
|
|
|
from datetime import datetime
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-06-09 13:17:31 +01:00
|
|
|
from pydantic import EmailStr, ConfigDict
|
2026-05-25 15:15:50 +01:00
|
|
|
|
2026-06-10 13:48:59 +01:00
|
|
|
from src.schemas import (
|
|
|
|
|
CustomBaseModel,
|
|
|
|
|
OrgIDMixin,
|
|
|
|
|
UserIDMixin,
|
|
|
|
|
GroupSummary,
|
|
|
|
|
OrgSummary,
|
|
|
|
|
UserSummary,
|
|
|
|
|
)
|
2026-05-27 16:51:46 +01:00
|
|
|
from src.contact.schemas import ContactModel
|
|
|
|
|
|
2026-04-06 12:41:49 +01:00
|
|
|
from src.organisation.constants import Status, ContactType
|
2026-06-11 13:38:14 +01:00
|
|
|
from src.organisation.schemas_questionnaires import (
|
|
|
|
|
QuestionnaireQuestionsVersion0 as CurrentQuestions,
|
|
|
|
|
questionnaire_union,
|
|
|
|
|
)
|
2026-06-11 12:24:36 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class QuestionnaireMetadata(CustomBaseModel):
|
|
|
|
|
version: int
|
|
|
|
|
submission_date: Optional[datetime] = None
|
2026-05-27 16:51:46 +01:00
|
|
|
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-05-28 13:28:14 +01:00
|
|
|
class Questionnaire(CustomBaseModel):
|
2026-06-11 12:24:36 +01:00
|
|
|
metadata: QuestionnaireMetadata
|
2026-06-11 13:38:14 +01:00
|
|
|
questions: questionnaire_union
|
2026-05-19 12:55:46 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-10 09:49:05 +01:00
|
|
|
class ContactSummary(CustomBaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
email: Optional[EmailStr] = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrgSchema(OrgIDMixin):
|
|
|
|
|
name: str
|
|
|
|
|
status: Status
|
|
|
|
|
root_user_email: EmailStr
|
|
|
|
|
intake_questionnaire: Optional[Questionnaire] = None
|
|
|
|
|
|
|
|
|
|
billing_contact: ContactSummary
|
|
|
|
|
owner_contact: ContactSummary
|
|
|
|
|
security_contact: ContactSummary
|
|
|
|
|
|
|
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPostOrgRequest(CustomBaseModel):
|
2026-04-06 12:41:49 +01:00
|
|
|
name: str
|
2026-06-11 13:38:14 +01:00
|
|
|
intake_questionnaire: Optional[CurrentQuestions] = None
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-29 09:44:24 +01:00
|
|
|
class OrgPostOrgResponse(CustomBaseModel):
|
2026-06-10 13:48:59 +01:00
|
|
|
id: int
|
2026-05-29 09:44:24 +01:00
|
|
|
name: str
|
|
|
|
|
status: Status
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPatchQuestionnaireRequest(OrgIDMixin):
|
2026-06-11 13:38:14 +01:00
|
|
|
intake_questionnaire: CurrentQuestions
|
2026-04-06 12:41:49 +01:00
|
|
|
partial: bool
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-29 09:44:24 +01:00
|
|
|
class OrgPatchQuestionnaireResponse(CustomBaseModel):
|
2026-06-10 13:48:59 +01:00
|
|
|
id: int
|
2026-05-29 09:44:24 +01:00
|
|
|
name: str
|
|
|
|
|
intake_questionnaire: Questionnaire
|
|
|
|
|
status: Status
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPatchStatusRequest(OrgIDMixin):
|
2026-04-06 12:41:49 +01:00
|
|
|
status: Status
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-29 09:44:24 +01:00
|
|
|
class OrgPatchStatusResponse(CustomBaseModel):
|
2026-06-10 13:48:59 +01:00
|
|
|
id: int
|
2026-05-29 09:44:24 +01:00
|
|
|
name: str
|
|
|
|
|
status: Status
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPatchContactRequest(OrgIDMixin):
|
2026-05-27 12:21:03 +01:00
|
|
|
contact_type: ContactType
|
|
|
|
|
|
2026-05-25 15:15:50 +01:00
|
|
|
email: Optional[EmailStr] = None
|
|
|
|
|
first_name: Optional[str] = None
|
|
|
|
|
last_name: Optional[str] = None
|
|
|
|
|
phonenumber: Optional[str] = None
|
|
|
|
|
vat_number: Optional[str] = None
|
|
|
|
|
post_office_box_number: Optional[str] = None
|
|
|
|
|
street_address: Optional[str] = None
|
|
|
|
|
street_address_line_2: Optional[str] = None
|
|
|
|
|
locality: Optional[str] = None
|
|
|
|
|
address_region: Optional[str] = None
|
|
|
|
|
country_code: Optional[str] = None
|
|
|
|
|
postal_code: Optional[str] = None
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPostUserRequest(OrgIDMixin, UserIDMixin):
|
|
|
|
|
pass
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-29 09:44:24 +01:00
|
|
|
class OrgPostUserResponse(CustomBaseModel):
|
2026-06-10 13:48:59 +01:00
|
|
|
organisation: OrgSummary
|
|
|
|
|
users: list[UserSummary]
|
2026-05-29 09:44:24 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgPatchRootRequest(OrgIDMixin, UserIDMixin):
|
|
|
|
|
pass
|
2026-04-06 12:41:49 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-29 09:44:24 +01:00
|
|
|
class OrgPatchRootResponse(CustomBaseModel):
|
|
|
|
|
name: str
|
|
|
|
|
root_user_email: str
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgGetUserResponse(CustomBaseModel):
|
2026-06-09 14:21:32 +01:00
|
|
|
users: list[dict[str, str | int]]
|
2026-06-10 09:49:05 +01:00
|
|
|
organisation: OrgSummary
|
2026-05-25 16:54:45 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgGetGroupResponse(CustomBaseModel):
|
2026-06-10 13:48:59 +01:00
|
|
|
organisation: OrgSummary
|
|
|
|
|
groups: list[GroupSummary]
|
2026-05-25 16:54:45 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgGetContactResponse(CustomBaseModel):
|
2026-05-25 15:15:50 +01:00
|
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
contact: ContactModel
|
2026-06-10 09:49:05 +01:00
|
|
|
organisation: OrgSummary
|
2026-06-03 09:45:48 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-03 09:45:48 +01:00
|
|
|
class OrgPatchContactResponse(CustomBaseModel):
|
|
|
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
|
|
|
|
|
|
|
|
contact: ContactModel
|
2026-06-10 09:49:05 +01:00
|
|
|
organisation: OrgSummary
|
2026-05-25 15:15:50 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-27 16:51:46 +01:00
|
|
|
class OrgGetOrgResponse(CustomBaseModel):
|
2026-06-10 09:49:05 +01:00
|
|
|
organisations: list[OrgSchema]
|