from datetime import date from typing import Optional from pydantic import BaseModel, field_validator # ── Program ────────────────────────────────────────────── class ProgramCreate(BaseModel): day_of_week: int day_label: str time: str title: str host: str genre: str class ProgramUpdate(BaseModel): day_of_week: Optional[int] = None day_label: Optional[str] = None time: Optional[str] = None title: Optional[str] = None host: Optional[str] = None genre: Optional[str] = None class ProgramResponse(BaseModel): id: int day_of_week: int day_label: str time: str title: str host: str genre: str model_config = {"from_attributes": True} # ── Event ──────────────────────────────────────────────── class EventCreate(BaseModel): date: date title: str description: str location: str icon: str rsvp_url: Optional[str] = None class EventUpdate(BaseModel): date: Optional[date] = None title: Optional[str] = None description: Optional[str] = None location: Optional[str] = None icon: Optional[str] = None rsvp_url: Optional[str] = None active: Optional[bool] = None class EventResponse(BaseModel): id: int date: date title: str description: str location: str icon: str rsvp_url: Optional[str] active: bool model_config = {"from_attributes": True} # ── DonationTier ───────────────────────────────────────── class TierCreate(BaseModel): name: str amount: float icon: str benefits: list[str] display_order: int class TierUpdate(BaseModel): name: Optional[str] = None amount: Optional[float] = None icon: Optional[str] = None benefits: Optional[list[str]] = None display_order: Optional[int] = None class TierResponse(BaseModel): id: int name: str amount: float icon: str benefits: list[str] display_order: int model_config = {"from_attributes": True}