Add Facebook Writer API with models, routers, and migration summary
Co-authored-by: ajay.calsoft <ajay.calsoft@gmail.com>
This commit is contained in:
84
backend/api/facebook_writer/models/post_models.py
Normal file
84
backend/api/facebook_writer/models/post_models.py
Normal file
@@ -0,0 +1,84 @@
|
||||
"""Pydantic models for Facebook Post functionality."""
|
||||
|
||||
from typing import Optional, List, Dict, Any
|
||||
from pydantic import BaseModel, Field
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class PostGoal(str, Enum):
|
||||
"""Post goal options."""
|
||||
PROMOTE_PRODUCT = "Promote a product/service"
|
||||
SHARE_CONTENT = "Share valuable content"
|
||||
INCREASE_ENGAGEMENT = "Increase engagement"
|
||||
BUILD_AWARENESS = "Build brand awareness"
|
||||
DRIVE_TRAFFIC = "Drive website traffic"
|
||||
GENERATE_LEADS = "Generate leads"
|
||||
ANNOUNCE_NEWS = "Announce news/updates"
|
||||
CUSTOM = "Custom"
|
||||
|
||||
|
||||
class PostTone(str, Enum):
|
||||
"""Post tone options."""
|
||||
INFORMATIVE = "Informative"
|
||||
HUMOROUS = "Humorous"
|
||||
INSPIRATIONAL = "Inspirational"
|
||||
UPBEAT = "Upbeat"
|
||||
CASUAL = "Casual"
|
||||
PROFESSIONAL = "Professional"
|
||||
CONVERSATIONAL = "Conversational"
|
||||
CUSTOM = "Custom"
|
||||
|
||||
|
||||
class MediaType(str, Enum):
|
||||
"""Media type options."""
|
||||
NONE = "None"
|
||||
IMAGE = "Image"
|
||||
VIDEO = "Video"
|
||||
CAROUSEL = "Carousel"
|
||||
LINK_PREVIEW = "Link Preview"
|
||||
|
||||
|
||||
class AdvancedOptions(BaseModel):
|
||||
"""Advanced post generation options."""
|
||||
use_hook: bool = Field(default=True, description="Use attention-grabbing hook")
|
||||
use_story: bool = Field(default=True, description="Include storytelling elements")
|
||||
use_cta: bool = Field(default=True, description="Add clear call-to-action")
|
||||
use_question: bool = Field(default=True, description="Include engagement question")
|
||||
use_emoji: bool = Field(default=True, description="Use relevant emojis")
|
||||
use_hashtags: bool = Field(default=True, description="Add relevant hashtags")
|
||||
|
||||
|
||||
class FacebookPostRequest(BaseModel):
|
||||
"""Request model for Facebook post generation."""
|
||||
business_type: str = Field(..., description="Type of business (e.g., 'Fitness coach')")
|
||||
target_audience: str = Field(..., description="Target audience description (e.g., 'Fitness enthusiasts aged 25-35')")
|
||||
post_goal: PostGoal = Field(..., description="Main goal of the post")
|
||||
custom_goal: Optional[str] = Field(None, description="Custom goal if 'Custom' is selected")
|
||||
post_tone: PostTone = Field(..., description="Tone of the post")
|
||||
custom_tone: Optional[str] = Field(None, description="Custom tone if 'Custom' is selected")
|
||||
include: Optional[str] = Field(None, description="Elements to include in the post")
|
||||
avoid: Optional[str] = Field(None, description="Elements to avoid in the post")
|
||||
media_type: MediaType = Field(default=MediaType.NONE, description="Type of media to include")
|
||||
advanced_options: AdvancedOptions = Field(default_factory=AdvancedOptions, description="Advanced generation options")
|
||||
|
||||
|
||||
class FacebookPostAnalytics(BaseModel):
|
||||
"""Analytics predictions for the generated post."""
|
||||
expected_reach: str = Field(..., description="Expected reach range")
|
||||
expected_engagement: str = Field(..., description="Expected engagement percentage")
|
||||
best_time_to_post: str = Field(..., description="Optimal posting time")
|
||||
|
||||
|
||||
class FacebookPostOptimization(BaseModel):
|
||||
"""Optimization suggestions for the post."""
|
||||
suggestions: List[str] = Field(..., description="List of optimization suggestions")
|
||||
|
||||
|
||||
class FacebookPostResponse(BaseModel):
|
||||
"""Response model for Facebook post generation."""
|
||||
success: bool = Field(..., description="Whether the generation was successful")
|
||||
content: Optional[str] = Field(None, description="Generated post content")
|
||||
analytics: Optional[FacebookPostAnalytics] = Field(None, description="Analytics predictions")
|
||||
optimization: Optional[FacebookPostOptimization] = Field(None, description="Optimization suggestions")
|
||||
error: Optional[str] = Field(None, description="Error message if generation failed")
|
||||
metadata: Optional[Dict[str, Any]] = Field(None, description="Additional metadata about the generation")
|
||||
Reference in New Issue
Block a user