geo/backend/app/schemas/monitoring.py

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")