| from typing import Any |
|
|
| from ...config.logfire_config import get_logger |
|
|
| logger = get_logger(__name__) |
|
|
|
|
| class ContentHandler: |
| """ |
| Handles AI Content Generation, Visual Assets, and Approval Workflows. |
| Facade delegating specialized tasks to domain sub-generators. |
| """ |
|
|
| def __init__(self, supabase_client: Any): |
| self.supabase_client = supabase_client |
|
|
| |
| from .approval_manager import ApprovalManager |
| from .blog_generator import BlogGenerator |
| from .sales_pitch import SalesPitchGenerator |
| from .visual_generator import VisualAssetGenerator |
|
|
| self.sales_pitch = SalesPitchGenerator(supabase_client) |
| self.visual_generator = VisualAssetGenerator(supabase_client) |
| self.blog_generator = BlogGenerator(supabase_client) |
| self.approval_manager = ApprovalManager(supabase_client) |
|
|
| async def generate_pitch(self, company: str, job_title: str) -> dict: |
| return await self.sales_pitch.generate_pitch(company, job_title) |
|
|
| async def generate_visual_asset(self, style: str) -> dict: |
| return await self.visual_generator.generate_visual_asset(style) |
|
|
| async def draft_blog(self, topic: str, industry: list[str] | None, keywords: str | None) -> tuple[bool, dict]: |
| return await self.blog_generator.draft_blog(topic, industry, keywords) |
|
|
| async def draft_from_leads(self, lead_ids: list[str]) -> tuple[bool, dict]: |
| return await self.blog_generator.draft_from_leads(lead_ids) |
|
|
| async def draft_from_leads_physical(self, task_id: str, lead_ids: list[str]) -> str: |
| return await self.blog_generator.draft_from_leads_physical(task_id, lead_ids) |
|
|
| async def submit_blog(self, post_id: str) -> tuple[bool, dict]: |
| return await self.blog_generator.submit_blog(post_id) |
|
|
| async def process_approval(self, item_type: str, item_id: str, action: str, notes: str | None) -> bool: |
| return await self.approval_manager.process_approval(item_type, item_id, action, notes) |
|
|
| async def get_pending_approvals(self) -> dict: |
| return await self.approval_manager.get_pending_approvals() |
|
|
| async def generate_reject_suggestion(self, item_type: str, item_id: str) -> dict: |
| return await self.approval_manager.generate_reject_suggestion(item_type, item_id) |
|
|
| async def get_content_context(self, source_id: str, source_type: str) -> dict: |
| return await self.blog_generator.get_content_context(source_id, source_type) |
|
|
| def calculate_ai_score(self, content: str) -> int: |
| return self.blog_generator.calculate_ai_score(content) |
|
|