diff --git a/src/fiber_package/action/request/list.py b/src/fiber_package/action/request/list.py index 40dfe58..82958ef 100644 --- a/src/fiber_package/action/request/list.py +++ b/src/fiber_package/action/request/list.py @@ -2,9 +2,26 @@ from pydantic import BaseModel, UUID7 from fiber_package.membership_tag import Membership -ListPeopleResponse = list[BaseModel] +# List People class ListPeopleRequest(BaseModel): association_tag: str membership: Membership - query: str | None + query: str | None = None + +ListPeopleResponse = list[BaseModel] + +# List Committees + +class ListCommitteesRequest(BaseModel): + association_tag: str + query: str | None = None + +ListCommitteesResponse = list[BaseModel] + +# List Committee Editions + +class ListCommitteeEditionsRequest(BaseModel): + committee: UUID7 + +ListCommitteeEditionsResponse = list[BaseModel] \ No newline at end of file diff --git a/src/fiber_package/committee/committee.py b/src/fiber_package/committee/committee.py index 4b57b21..3c9f38a 100644 --- a/src/fiber_package/committee/committee.py +++ b/src/fiber_package/committee/committee.py @@ -1,9 +1,10 @@ -from pydantic import model_validator, UUID7 +from pydantic import model_validator, UUID7, computed_field from fiber_package.refs import ( CommitteeEditionRef, CommitteeEditionRefList, - EntityRefList + EntityRefList, + AssociationRef ) from fiber_package.base import FiberBaseModel @@ -21,6 +22,9 @@ An edition is a definite group of members with functions and a timespan. class CommitteeModel(FiberBaseModel): collection_name: Literal["committee"] = "committee" + association: AssociationRef + + short_name: str full_name_en: str full_name_nl: str description_en: str = "" @@ -47,12 +51,27 @@ class CommitteeEditionModel(FiberBaseModel): members: EntityRefList functions: dict[UUID7, str] + remarks: str = "" + start_date: date end_date: date | None # None means ongoing + @computed_field + @property + def edition_string(self) -> str: + start_year = self.start_date.year + if self.end_date is None: + return f"{start_year} - " + else: + end_year = self.end_date.year + if end_year == start_year: + return f"{start_year}" + else: + return f"{start_year} - {end_year}" + @model_validator(mode='after') def functions_to_members_only(self) -> Self: for uuid in self.functions: if uuid not in self.members: - raise ValueError("Cannot only assign functions to committee members") + raise ValueError("Can only assign functions to committee members") return self