from datetime import datetime from pydantic import BaseModel from app.schemas.user import UserInfo class EventCreate(BaseModel): title: str city: str description: str | None = None cover_url: str | None = None location_name: str | None = None start_time: datetime | None = None end_time: datetime | None = None max_participants: int = 0 spot_id: int | None = None class EventUpdate(BaseModel): title: str | None = None city: str | None = None description: str | None = None cover_url: str | None = None location_name: str | None = None start_time: datetime | None = None end_time: datetime | None = None max_participants: int | None = None spot_id: int | None = None class EventBrief(BaseModel): id: int title: str city: str cover_url: str | None = None location_name: str | None = None start_time: datetime | None = None end_time: datetime | None = None status: str = "upcoming" audit_status: str = "pending" creator: UserInfo | None = None registration_count: int = 0 max_participants: int = 0 created_at: datetime | None = None model_config = {"from_attributes": True} class EventDetail(EventBrief): description: str | None = None spot_id: int | None = None reject_reason: str | None = None has_registered: bool = False photos: list["EventPhotoOut"] = [] class EventPhotoOut(BaseModel): id: int image_url: str caption: str | None = None uploader: UserInfo | None = None spot_id: int | None = None created_at: datetime | None = None model_config = {"from_attributes": True} class EventPhotoCreate(BaseModel): image_url: str caption: str | None = None spot_id: int | None = None class RegistrationOut(BaseModel): id: int event_id: int user: UserInfo | None = None status: str = "registered" created_at: datetime | None = None model_config = {"from_attributes": True}