from datetime import datetime from typing import Literal from sqlmodel import Field, Relationship, SQLModel, String class Event(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) title: str = Field(nullable=False) event_time: datetime = Field(nullable=False) registration_deadline: datetime = Field(nullable=False) description: str recipe_link: str # Min and max number of people needed for cooking, doing the dishes and preparing the tables team_cooking_min: int = 3 team_cooking_max: int = 5 team_dishes_min: int = 3 team_dishes_max: int = 5 team_prep_min: int = 1 team_prep_max: int = 1 registrations: list["Registration"] = Relationship() team: list["TeamRegistration"] = Relationship() class TeamRegistration(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) event_id: int | None = Field(default=None, foreign_key="event.id") person_name: str = Field(nullable=False) work_type: Literal["cooking", "dishes", "tables"] = Field( nullable=False, sa_type=String ) comment: str | None class Household(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(nullable=False) class Registration(SQLModel, table=True): event_id: int | None = Field(default=None, foreign_key="event.id", primary_key=True) household_id: int | None = Field( default=None, foreign_key="household.id", primary_key=True ) num_adult_meals: int num_children_meals: int num_small_children_meals: int comment: str | None household: Household = Relationship()