Files
yu-zhi-ran/platform/backend/app/schemas.py
T

204 lines
5.0 KiB
Python

from pydantic import BaseModel, ConfigDict
from datetime import datetime, date
from typing import Optional, List, Dict, Any
class AuditLogBase(BaseModel):
user_id: Optional[int] = None
username: str
action: str
resource_type: Optional[str] = None
resource_id: Optional[str] = None
details: Optional[Dict[str, Any]] = None
ip_address: Optional[str] = None
user_agent: Optional[str] = None
created_at: Optional[datetime] = None
class AuditLogResponse(AuditLogBase):
id: int
model_config = ConfigDict(from_attributes=True)
class UserBase(BaseModel):
username: str
role: str = "user"
class UserCreate(UserBase):
password: str
class UserUpdate(BaseModel):
username: Optional[str] = None
password: Optional[str] = None
role: Optional[str] = None
class UserResponse(UserBase):
id: int
created_at: Optional[datetime] = None
model_config = ConfigDict(from_attributes=True)
class LoginRequest(BaseModel):
username: str
password: str
class TokenResponse(BaseModel):
token: str
role: str
user: UserResponse
class TopicBase(BaseModel):
id: str
title: str
field: str
priority_score: int = 0
status: str = "pending"
compliance_score: Optional[int] = None
ready_at: Optional[date] = None
published_at: Optional[date] = None
generated_at: Optional[datetime] = None
platform_urls: Optional[Dict[str, str]] = None
class TopicResponse(TopicBase):
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
model_config = ConfigDict(from_attributes=True)
class ArticleBase(BaseModel):
id: str
topic_id: str
platform: str
file_path: str
status: str = "draft"
compliance_score: Optional[int] = None
created_at: Optional[datetime] = None
class ArticleResponse(ArticleBase):
model_config = ConfigDict(from_attributes=True)
class SystemStatus(BaseModel):
total_topics: int
topics_by_status: Dict[str, int]
ready_topics: List[TopicResponse]
today_articles: int
compliance_rate: float
last_optimization: Optional[datetime] = None
execution_time: Optional[float] = None
class OptimizationRequest(BaseModel):
topic_ids: Optional[List[str]] = None
class PublishRequest(BaseModel):
topic_id: str
platform_urls: Dict[str, str]
class PublishActionRequest(BaseModel):
action: str
platform: Optional[str] = None
status: str
operator: Optional[str] = None
description: Optional[str] = None
suggestion: Optional[str] = None
url: Optional[str] = None
error_msg: Optional[str] = None
class PublishRecordResponse(BaseModel):
id: int
topic_id: str
platform: str
action: str
status: str
operator: Optional[str] = None
description: Optional[str] = None
suggestion: Optional[str] = None
url: Optional[str] = None
error_msg: Optional[str] = None
created_at: datetime
model_config = ConfigDict(from_attributes=True)
class BatchPublishRequest(BaseModel):
date: str
class AuditLogResponse(BaseModel):
id: int
user_id: Optional[int] = None
username: str
action: str
resource_type: Optional[str] = None
resource_id: Optional[str] = None
details: Optional[Dict[str, Any]] = None
ip_address: Optional[str] = None
user_agent: Optional[str] = None
created_at: datetime
model_config = ConfigDict(from_attributes=True)
# --- 案例库 Schema ---
class CaseBase(BaseModel):
title: str
field: str
summary: str
key_metrics: Optional[str] = None
date: Optional[str] = None
source: str
source_url: Optional[str] = None
credibility_rating: Optional[str] = None
china_applicability: Optional[str] = None
class CaseResponse(CaseBase):
id: int
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
model_config = ConfigDict(from_attributes=True)
# --- 任务日志 Schema ---
class TaskLogBase(BaseModel):
task_name: str
topic_id: Optional[str] = None
status: str
message: Optional[str] = None
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
duration_seconds: Optional[int] = None
class TaskLogResponse(TaskLogBase):
id: int
model_config = ConfigDict(from_attributes=True)
# --- LLM 配置 Schema ---
class LLMConfigBase(BaseModel):
name: str
system_prompt: Optional[str] = None
user_prompt_template: str
temperature: float = 0.7
max_tokens: int = 2000
model: Optional[str] = None
is_active: bool = True
class LLMConfigResponse(LLMConfigBase):
id: int
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
model_config = ConfigDict(from_attributes=True)
# --- 系统配置 Schema ---
class SystemConfigBase(BaseModel):
key: str
value: Optional[str] = None
description: Optional[str] = None
class SystemConfigResponse(SystemConfigBase):
updated_at: Optional[datetime] = None
model_config = ConfigDict(from_attributes=True)