diff --git a/src/fiber_package/entities/member.py b/src/fiber_package/entities/member.py index d30dba3..1f32690 100644 --- a/src/fiber_package/entities/member.py +++ b/src/fiber_package/entities/member.py @@ -6,6 +6,7 @@ from .enums import Membership, OnlineAlmanacField from .submodels import Address, LoginInfo class MemberModel(FormerMemberModel): + # requires that Membership equals member membership: Annotated[Membership, Field(pattern="member")] login: LoginInfo diff --git a/src/fiber_package/groups/committees/committee.py b/src/fiber_package/groups/committees/committee.py new file mode 100644 index 0000000..d81b183 --- /dev/null +++ b/src/fiber_package/groups/committees/committee.py @@ -0,0 +1,39 @@ +from pydantic import BaseModel +from fiber_package.util import EntityList, GroupList, GroupRef + +from .enums import CommitteeType + +''' +A committee represents any group of members +''' + +class CommitteeModel(BaseModel): + full_name_EN: str + full_name_NL: str + description_EN: str + description_NL: str + + active: bool = True + + editions: GroupList("committee_edition", []) + current_edition: GroupRef("committee_edition", None) + + @model_validator(mode='after') + def current_edition_in_editions(self) -> Self: + uuid = self.current_edition.uuid + if uuid is None: + return self + if uuid not in self.editions.uuids: + raise ValueError("Current edition must be in list of editions") + return self + +class CommitteeEditionModel(BaseModel): + members: EntityList = EntityList("member", []) + functions: dict[UUID4, str] + + @model_validator(mode='after') + def functions_to_members_only(self) -> Self: + for uuid in self.functions.keys(): + if uuid not in self.members.uuids: + raise ValueError("Cannot only assign functions to members") + return self \ No newline at end of file diff --git a/src/fiber_package/groups/committees/enums.py b/src/fiber_package/groups/committees/enums.py new file mode 100644 index 0000000..fe78120 --- /dev/null +++ b/src/fiber_package/groups/committees/enums.py @@ -0,0 +1,9 @@ +from enum import StrEnum + +class CommitteeType(StrEnum): + board_committee: "Board committee" + GMM_committee: "GMM committee" + guild: "Guild" + subassociation_board: "Subassociation board" + +