""" Pydantic models for organisation module Models follow the nomenclature of: - Sub-models: "Schema" - Mixins: "Mixin" - Models: "" ie "OrgPostOrgRequest" """ from typing import Optional from pydantic import EmailStr, ConfigDict from src.schemas import CustomBaseModel from src.contact.schemas import ContactModel from src.user.schemas import UserIDMixin from src.organisation.constants import Status, ContactType class Questionnaire(CustomBaseModel): question_one: Optional[str] = None question_two: Optional[str] = None question_three: Optional[str] = None class OrgIDMixin(CustomBaseModel): organisation_id: int class OrgPostOrgRequest(CustomBaseModel): name: str intake_questionnaire: Optional[Questionnaire] = None class OrgPostOrgResponse(CustomBaseModel): name: str status: Status class OrgPatchQuestionnaireRequest(OrgIDMixin): intake_questionnaire: Questionnaire partial: bool class OrgPatchQuestionnaireResponse(CustomBaseModel): name: str intake_questionnaire: Questionnaire status: Status class OrgPatchStatusRequest(OrgIDMixin): status: Status class OrgPatchStatusResponse(CustomBaseModel): name: str status: Status class OrgPatchContactRequest(OrgIDMixin): contact_type: ContactType 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 class OrgPostUserRequest(OrgIDMixin, UserIDMixin): pass class OrgPostUserResponse(CustomBaseModel): users: list[str] class OrgDeleteUserRequest(OrgIDMixin, UserIDMixin): pass class OrgPatchRootRequest(OrgIDMixin, UserIDMixin): pass class OrgPatchRootResponse(CustomBaseModel): name: str root_user_email: str class OrgGetUserResponse(CustomBaseModel): users: list[str] class OrgGetGroupResponse(CustomBaseModel): groups: list[str] class OrgGetContactResponse(CustomBaseModel): model_config = ConfigDict(from_attributes=True, extra="ignore") contact: ContactModel class OrgGetOrgResponse(CustomBaseModel): name: str status: Status root_user: Optional[str] = None owner_contact: Optional[str] = None billing_contact: Optional[str] = None security_contact: Optional[str] = None class OrgDeleteOrgRequest(OrgIDMixin): pass