from typing import Dict, Any, List, Optional from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, func from app.models.user import User, Product from app.services.marketing import MarketingService import logging logger = logging.getLogger(__name__) class OnboardingService: def __init__(self, db: AsyncSession): self.db = db async def check_status(self, user_id: str) -> Dict[str, Any]: product_count = await self.db.execute( select(func.count(Product.id)).where( Product.user_id == user_id, Product.is_active == True ) ) has_products = (product_count.scalar() or 0) > 0 return {"onboarded": has_products} async def generate_first_product( self, user_id: str, name: str, description: str, category: str = "", target: str = "US importers" ) -> Dict[str, Any]: product = Product( user_id=user_id, name=name, description=description, category=category or "general", is_active=True, ) self.db.add(product) await self.db.flush() mkt = MarketingService() try: content = await mkt.generate( product_name=name, description=description, category=category or "general", target=target, style="professional", count=3, language="en", ) except Exception as e: logger.warning(f"Onboarding content generation failed: {e}") content = [f"Check out our {name} - {description[:100]}..."] try: keywords_result = await mkt.generate_keywords( product_name=name, description=description, category=category or "general" ) keywords = keywords_result if isinstance(keywords_result, list) else [] except Exception as e: logger.warning(f"Keyword generation failed: {e}") keywords = [] product.keywords = keywords[:10] await self.db.flush() return { "product": { "id": str(product.id), "name": product.name, "description": product.description, "category": product.category, "keywords": keywords[:10], }, "generated_content": content, "keywords": keywords[:10], }