cosmo/backend/app/models/schemas/social.py

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