59 lines
1.7 KiB
Python

from pydantic import model_validator, Field, UUID7
from fiber_package.refs import EntityRefList
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"
short_name: str
full_name_en: str
full_name_nl: str
description_en: str
description_nl: str
association_tag: str
active: bool = True
ldap_id: int | None = None
members: EntityRefList = EntityRefList([], "entity")
previous_members: EntityRefList = EntityRefList([], "entity")
guild_masters: list[UUID7] = Field(default_factory=list)
last_active: dict[UUID7, date] = Field(default_factory=dict)
@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
@model_validator(mode='after')
def guild_masters_always_active(self) -> Self:
today = date.today()
for uuid in self.guild_masters:
self.last_active[uuid] = today
return self