204 lines
5.0 KiB
Python
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)
|
|
|