from typing import Optional, List from datetime import datetime from pydantic import BaseModel, Field # --- Simple Body Info Schema --- class BodyInfo(BaseModel): id: str name: str name_zh: Optional[str] = None class Config: orm_mode = True # --- User Follows Schemas --- class UserFollowBase(BaseModel): body_id: str class UserFollowCreate(UserFollowBase): pass class UserFollowResponse(UserFollowBase): user_id: int created_at: datetime # Extended fields with body details id: str name: str name_zh: Optional[str] = None type: str is_active: bool class Config: orm_mode = True # --- Channel Message Schemas --- class ChannelMessageBase(BaseModel): content: str = Field(..., max_length=500, description="Message content") class ChannelMessageCreate(ChannelMessageBase): pass class ChannelMessageResponse(ChannelMessageBase): user_id: int username: str body_id: str created_at: datetime class Config: # Allow ORM mode for compatibility if we ever fetch from DB, # though these are primarily Redis-based pass # --- Celestial Event Schemas --- class CelestialEventBase(BaseModel): body_id: str title: str event_type: str event_time: datetime description: Optional[str] = None details: Optional[dict] = None source: Optional[str] = None class CelestialEventCreate(CelestialEventBase): pass class CelestialEventResponse(CelestialEventBase): id: int created_at: datetime body: Optional[BodyInfo] = None class Config: orm_mode = True