73 lines
3.5 KiB
Python
73 lines
3.5 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class MonitoringRecordCreate(BaseModel):
|
|
brand_id: uuid.UUID = Field(..., description="品牌ID")
|
|
content_id: str | None = Field(None, description="内容ID")
|
|
query_keywords: str | None = Field(None, description="查询关键词")
|
|
platform: str | None = Field(None, description="平台")
|
|
check_interval_hours: int = Field(24, description="检测间隔(小时)")
|
|
|
|
|
|
class MonitoringRecordResponse(BaseModel):
|
|
id: uuid.UUID = Field(..., description="记录ID")
|
|
brand_id: uuid.UUID = Field(..., description="品牌ID")
|
|
content_id: str | None = Field(None, description="内容ID")
|
|
query_keywords: str | None = Field(None, description="查询关键词")
|
|
platform: str | None = Field(None, description="平台")
|
|
baseline_citation_count: int = Field(0, description="基线引用量")
|
|
baseline_sentiment: float | None = Field(None, description="基线情感分数")
|
|
baseline_rank: int | None = Field(None, description="基线排名")
|
|
current_citation_count: int = Field(0, description="当前引用量")
|
|
current_sentiment: float | None = Field(None, description="当前情感分数")
|
|
current_rank: int | None = Field(None, description="当前排名")
|
|
change_type: str | None = Field(None, description="变化类型: positive/negative/neutral")
|
|
change_details: dict | None = Field(None, description="变化详情")
|
|
check_interval_hours: int = Field(24, description="检测间隔(小时)")
|
|
last_checked_at: datetime | None = Field(None, description="上次检测时间")
|
|
next_check_at: datetime | None = Field(None, description="下次检测时间")
|
|
status: str = Field("active", description="状态: active/paused/completed")
|
|
created_at: datetime = Field(..., description="创建时间")
|
|
updated_at: datetime = Field(..., description="更新时间")
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MonitoringRecordList(BaseModel):
|
|
records: list[MonitoringRecordResponse] = Field(default_factory=list, description="监测记录列表")
|
|
total: int = Field(..., description="总数")
|
|
|
|
|
|
class MonitoringChangeReport(BaseModel):
|
|
monitoring_record_id: uuid.UUID = Field(..., description="监测记录ID")
|
|
brand_id: uuid.UUID = Field(..., description="品牌ID")
|
|
change_type: str = Field(..., description="变化类型: positive/negative/neutral")
|
|
change_details: dict | None = Field(None, description="变化详情")
|
|
baseline: dict = Field(default_factory=dict, description="基线数据")
|
|
current: dict = Field(default_factory=dict, description="当前数据")
|
|
recommendations: list[str] = Field(default_factory=list, description="建议")
|
|
|
|
|
|
class ContentBaselineResponse(BaseModel):
|
|
id: uuid.UUID = Field(..., description="基线ID")
|
|
monitoring_record_id: uuid.UUID = Field(..., description="监测记录ID")
|
|
brand_name: str = Field(..., description="品牌名称")
|
|
keyword: str = Field(..., description="关键词")
|
|
platform: str = Field(..., description="平台")
|
|
citation_count: int = Field(0, description="引用量")
|
|
sentiment_score: float | None = Field(None, description="情感分数")
|
|
rank_position: int | None = Field(None, description="排名位置")
|
|
snapshot_data: dict | None = Field(None, description="快照数据")
|
|
recorded_at: datetime = Field(..., description="记录时间")
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MonitoringStatusUpdate(BaseModel):
|
|
status: str = Field(..., description="新状态: active/paused/completed")
|