Compare commits

..

No commits in common. "4fd9b5e0994e5521f94e08511f8997443f703682" and "62a99cc57bdbd4aaabb7b30034f304627b09f610" have entirely different histories.

7 changed files with 34 additions and 49 deletions

View File

@ -1,11 +0,0 @@
from fiber_package.base import FiberBaseModel
from fiber_package.refs import EntityRefList, CommitteeRefList, GuildRefList
from enum import StrEnum
class AssociationModel(FiberBaseModel):
full_name: str
# short name used for visibility strings (think: DLF, Kaiser, CNB, etc...)
tag: str

View File

@ -2,8 +2,8 @@ from enum import StrEnum
class Membership(StrEnum): class Membership(StrEnum):
member = "member" member = "member"
activity_goer = "activity_goer"
alumn = "alumn" alumn = "alumn"
extern = "extern"
class LanguageOption(StrEnum): class LanguageOption(StrEnum):
nl = "NL" nl = "NL"
@ -12,4 +12,16 @@ class LanguageOption(StrEnum):
class Gender(StrEnum): class Gender(StrEnum):
male = "m" male = "m"
female = "f" female = "f"
nonbinary = "n" nonbinary = "n"
class HonoraryStatus(StrEnum):
merit = "merit"
honorary = "honorary"
class OnlineAlmanacField(StrEnum):
address = "address"
birth_date = "birth_date"
email = "email"
phone_number = "phone_number"
study = "study"
gender = "gender"

View File

@ -2,10 +2,19 @@
from .person import PersonModel from .person import PersonModel
from .enums import HonoraryStatus, Gender from .enums import HonoraryStatus, Gender
class AlumnModel(PersonModel): class FormerMemberModel(PersonModel):
title: str | None = None
gender: Gender | None = None
honorary_status: HonoraryStatus | None = None
# TODO: picture, study_start (year, month?), study_end
# company emails?
class AlumnModel(FormerMemberModel):
graduated: bool = False graduated: bool = False
receive_spam_mail: bool = True receive_spam_mail: bool = True
class ExternalModel(PersonModel): class ExternalModel(PersonModel):
pass pass
# TODO... payment???
# TODO require login info??

View File

@ -3,23 +3,23 @@ from typing import Self, Literal
from datetime import date from datetime import date
from fiber_package.base import FiberBaseModel from fiber_package.base import FiberBaseModel
from fiber_package.membership_tag import MembershipTag from .enums import Membership, LanguageOption
from .enums import LanguageOption
from .submodels import Address from .submodels import Address
class PersonModel(FiberBaseModel): class PersonModel(FiberBaseModel):
collection_name: Literal["entity"] = "entity" collection_name: Literal["entity"] = "entity"
memberships: list[MembershipTag] membership: dict[str, Membership] = Field(default_factory=dict)
first_name: str first_name: str
infix_name: str | None = None # tussenvoegsel in Dutch names infix: str | None = None # mostly in Dutch names
last_name: str last_name: str
full_name: str | None = None # first_name + infix + last_name full_name: str | None = None # first_name + infix + last_name
email: EmailStr email: EmailStr
language: LanguageOption language: LanguageOption
# TODO: phone number
address: Address | None = None address: Address | None = None
phone_number: str | None = None
date_of_birth: date | None = None date_of_birth: date | None = None
@ -39,13 +39,8 @@ class PersonModel(FiberBaseModel):
@model_validator(mode="after") @model_validator(mode="after")
def generate_full_name(self) -> Self: def generate_full_name(self) -> Self:
full_name = self.first_name full_name = self.first_name
<<<<<<< HEAD
if self.infix: if self.infix:
full_name += " " + self.infix full_name += " " + self.infix
=======
if self.infix_name:
full_name += " " + self.infix_name
>>>>>>> tiago/db_structure
full_name += " " + self.last_name full_name += " " + self.last_name
self.full_name = full_name self.full_name = full_name
return self return self

View File

@ -1,19 +0,0 @@
from typing import Annotated
from pydantic import AfterValidator
from entity.member import MembershipTag
BARE_TAGS = ["public"]
def validate_visibility_tag(v: str) -> str:
if v in BARE_TAGS:
return v
_, _, status = v.partition(":")
if status in MembershipType:
return v
raise ValueError(f"Invalid visibility tag: {v!r}")
VisibilityTag = Annotated[str, AfterValidator(validate_visibility_tag)]
def generate_tag(association_tag: str, membership_tag: MembershipTag):
return association_tag + ":" + membership_tag

View File

@ -26,9 +26,8 @@ class RefList[C: str]:
def __contains__(self, item: UUID7) -> bool: def __contains__(self, item: UUID7) -> bool:
return item in self.uuids return item in self.uuids
SystemRef = Ref[Literal["system"]]
AssociationRef = Ref[Literal["association"]] SystemRefList = RefList[Literal["system"]]
AssociationRefList = RefList[Literal["association"]]
EntityRef = Ref[Literal["entity"]] EntityRef = Ref[Literal["entity"]]
EntityRefList = RefList[Literal["entity"]] EntityRefList = RefList[Literal["entity"]]

View File

@ -1,6 +1,6 @@
from fiber_package.base import FiberBaseModel from fiber_package.base import FiberBaseModel
from fiber_package.refs import AssociationRefList, EntityRefList from fiber_package.refs import SystemRefList, EntityRefList
class RootGroupModel(FiberBaseModel): class RootGroupModel(FiberBaseModel):
associations: AssociationRefList associations: SystemRefList
sys_admins: EntityRefList sys_admins: EntityRefList