Merge branch 'master' of dlfdev.liacs.nl:ictgilde/fiber-package

This commit is contained in:
Tiago Scholten 2026-09-07 16:36:05 +02:00
commit 990b3f4429
2 changed files with 41 additions and 5 deletions

View File

@ -2,9 +2,26 @@ from pydantic import BaseModel, UUID7
from fiber_package.membership_tag import Membership from fiber_package.membership_tag import Membership
ListPeopleResponse = list[BaseModel] # List People
class ListPeopleRequest(BaseModel): class ListPeopleRequest(BaseModel):
association_tag: str association_tag: str
membership: Membership 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]

View File

@ -1,9 +1,10 @@
from pydantic import model_validator, UUID7 from pydantic import model_validator, UUID7, computed_field
from fiber_package.refs import ( from fiber_package.refs import (
CommitteeEditionRef, CommitteeEditionRef,
CommitteeEditionRefList, CommitteeEditionRefList,
EntityRefList EntityRefList,
AssociationRef
) )
from fiber_package.base import FiberBaseModel 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): class CommitteeModel(FiberBaseModel):
collection_name: Literal["committee"] = "committee" collection_name: Literal["committee"] = "committee"
association: AssociationRef
short_name: str
full_name_en: str full_name_en: str
full_name_nl: str full_name_nl: str
description_en: str = "" description_en: str = ""
@ -47,12 +51,27 @@ class CommitteeEditionModel(FiberBaseModel):
members: EntityRefList members: EntityRefList
functions: dict[UUID7, str] functions: dict[UUID7, str]
remarks: str = ""
start_date: date start_date: date
end_date: date | None # None means ongoing 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') @model_validator(mode='after')
def functions_to_members_only(self) -> Self: def functions_to_members_only(self) -> Self:
for uuid in self.functions: for uuid in self.functions:
if uuid not in self.members: 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 return self