Files
ALwrity/backend/api/facebook_writer/models/engagement_models.py
2025-08-27 15:49:19 +00:00

70 lines
3.6 KiB
Python

"""Pydantic models for Facebook Engagement Analysis functionality."""
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field
from enum import Enum
class ContentType(str, Enum):
"""Content type options for analysis."""
POST = "Post"
STORY = "Story"
REEL = "Reel"
CAROUSEL = "Carousel"
VIDEO = "Video"
IMAGE = "Image"
LINK = "Link"
class AnalysisType(str, Enum):
"""Analysis type options."""
CONTENT_ANALYSIS = "Content analysis"
PERFORMANCE_PREDICTION = "Performance prediction"
OPTIMIZATION_SUGGESTIONS = "Optimization suggestions"
COMPETITOR_COMPARISON = "Competitor comparison"
TREND_ANALYSIS = "Trend analysis"
class FacebookEngagementRequest(BaseModel):
"""Request model for Facebook engagement analysis."""
content: str = Field(..., description="Content to analyze")
content_type: ContentType = Field(..., description="Type of content being analyzed")
analysis_type: AnalysisType = Field(..., description="Type of analysis to perform")
business_type: str = Field(..., description="Type of business")
target_audience: str = Field(..., description="Target audience description")
post_timing: Optional[str] = Field(None, description="When the content was/will be posted")
hashtags: Optional[List[str]] = Field(None, description="Hashtags used with the content")
competitor_content: Optional[str] = Field(None, description="Competitor content for comparison")
historical_performance: Optional[Dict[str, Any]] = Field(None, description="Historical performance data")
class EngagementMetrics(BaseModel):
"""Engagement metrics and predictions."""
predicted_reach: str = Field(..., description="Predicted reach")
predicted_engagement_rate: str = Field(..., description="Predicted engagement rate")
predicted_likes: str = Field(..., description="Predicted likes")
predicted_comments: str = Field(..., description="Predicted comments")
predicted_shares: str = Field(..., description="Predicted shares")
virality_score: str = Field(..., description="Virality potential score")
class OptimizationSuggestions(BaseModel):
"""Content optimization suggestions."""
content_improvements: List[str] = Field(..., description="Content improvement suggestions")
timing_suggestions: List[str] = Field(..., description="Posting time optimization")
hashtag_improvements: List[str] = Field(..., description="Hashtag optimization suggestions")
visual_suggestions: List[str] = Field(..., description="Visual element suggestions")
engagement_tactics: List[str] = Field(..., description="Engagement boosting tactics")
class FacebookEngagementResponse(BaseModel):
"""Response model for Facebook engagement analysis."""
success: bool = Field(..., description="Whether the analysis was successful")
content_score: Optional[float] = Field(None, description="Overall content quality score (0-100)")
engagement_metrics: Optional[EngagementMetrics] = Field(None, description="Predicted engagement metrics")
optimization_suggestions: Optional[OptimizationSuggestions] = Field(None, description="Optimization recommendations")
sentiment_analysis: Optional[Dict[str, Any]] = Field(None, description="Content sentiment analysis")
trend_alignment: Optional[Dict[str, Any]] = Field(None, description="Alignment with current trends")
competitor_insights: Optional[Dict[str, Any]] = Field(None, description="Competitor comparison insights")
error: Optional[str] = Field(None, description="Error message if analysis failed")
metadata: Optional[Dict[str, Any]] = Field(None, description="Additional metadata about the analysis")