Files

73 lines
2.4 KiB
Python

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()
product_info = {"name": name, "description": description, "category": category or "general"}
try:
content = await mkt.generate(
product_info=product_info,
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_info=product_info
)
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],
}