49 lines
2.3 KiB
Python
49 lines
2.3 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CompetitorAnalysisRequest(BaseModel):
|
|
brand_id: uuid.UUID = Field(..., description="品牌ID")
|
|
analysis_types: list[str] | None = Field(
|
|
None,
|
|
description="分析类型列表: citation_gap/content_strategy/platform_coverage/query_overlap/differentiation",
|
|
)
|
|
period_days: int | None = Field(30, description="分析周期天数")
|
|
|
|
|
|
class CompetitorInsightResponse(BaseModel):
|
|
id: uuid.UUID = Field(..., description="洞察ID")
|
|
brand_id: uuid.UUID = Field(..., description="品牌ID")
|
|
competitor_name: str = Field(..., description="竞品名称")
|
|
analysis_type: str = Field(..., description="分析类型")
|
|
insight_data: dict | None = Field(None, description="洞察数据")
|
|
citation_count_brand: int = Field(0, description="品牌引用次数")
|
|
citation_count_competitor: int = Field(0, description="竞品引用次数")
|
|
sentiment_brand: float | None = Field(None, description="品牌情感分数")
|
|
sentiment_competitor: float | None = Field(None, description="竞品情感分数")
|
|
platform_breakdown: dict | None = Field(None, description="平台分布")
|
|
gap_analysis: dict | None = Field(None, description="差距分析")
|
|
opportunity_areas: dict | None = Field(None, description="机会领域")
|
|
recommendations: dict | None = Field(None, description="策略建议")
|
|
confidence: str = Field("medium", description="置信度: high/medium/low")
|
|
period_days: int = Field(30, description="分析周期天数")
|
|
created_at: datetime = Field(..., description="创建时间")
|
|
updated_at: datetime = Field(..., description="更新时间")
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class CompetitorInsightList(BaseModel):
|
|
items: list[CompetitorInsightResponse] = Field(default_factory=list, description="洞察列表")
|
|
total: int = Field(0, description="总数")
|
|
|
|
|
|
class CompetitorGapSummary(BaseModel):
|
|
brand_name: str = Field(..., description="品牌名称")
|
|
competitor_name: str = Field(..., description="竞品名称")
|
|
gap_dimensions: list[dict] = Field(default_factory=list, description="差距维度列表")
|
|
overall_gap_score: float = Field(0.0, description="综合差距分数(0-100)")
|