from pydantic import model_validator from fiber_package.refs import EntityRefList, EntityRef from datetime import date from typing import Self, Literal from fiber_package.base import FiberBaseModel ''' Guilds are groups of members for an indefinite period. They have a list of members. Removing old members from last_active is done in fiber ''' class GuildModel(FiberBaseModel): collection_name: Literal["guild"] = "guild" full_name_en: str full_name_nl: str description_en: str description_nl: str members: EntityRefList previous_members: EntityRefList guild_masters: EntityRefList last_active: dict[EntityRef, date] @model_validator(mode='after') def current_members_not_previous(self) -> Self: for member in self.members: if member in self.previous_members: raise ValueError( "There can be no overlap between members and previous members!" ) return self @model_validator(mode='after') def guild_masters_are_members(self) -> Self: for master in self.guild_masters: if master not in self.members: raise ValueError("All guild masters must be members!") return self