79 lines
1.6 KiB
Python
79 lines
1.6 KiB
Python
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
|