Files
moreminimore-marketing/backend/services/progressive_setup_service.py
Kunthawat Greethong c35fa52117 Base code
2026-01-08 22:39:53 +07:00

252 lines
9.4 KiB
Python

"""
Progressive Setup Service
Handles progressive backend initialization based on user onboarding progress.
"""
import os
import json
from typing import Dict, Any, Optional, List
from datetime import datetime
from loguru import logger
from sqlalchemy.orm import Session
from sqlalchemy import text
from services.user_workspace_manager import UserWorkspaceManager
from services.onboarding.api_key_manager import get_onboarding_progress_for_user
class ProgressiveSetupService:
"""Manages progressive backend setup based on user progress."""
def __init__(self, db_session: Session):
self.db = db_session
self.workspace_manager = UserWorkspaceManager(db_session)
def initialize_user_environment(self, user_id: str) -> Dict[str, Any]:
"""Initialize user environment based on their onboarding progress."""
try:
logger.info(f"Initializing environment for user {user_id}")
# Get user's onboarding progress
progress = get_onboarding_progress_for_user(user_id)
current_step = progress.current_step
# Create or get user workspace
workspace = self.workspace_manager.get_user_workspace(user_id)
if not workspace:
workspace = self.workspace_manager.create_user_workspace(user_id)
# Set up features progressively
setup_status = self.workspace_manager.setup_progressive_features(user_id, current_step)
# Initialize user-specific services
services_status = self._initialize_user_services(user_id, current_step)
return {
"user_id": user_id,
"onboarding_step": current_step,
"workspace": workspace,
"setup_status": setup_status,
"services": services_status,
"initialized_at": datetime.now().isoformat()
}
except Exception as e:
logger.error(f"Error initializing user environment: {e}")
raise
def _initialize_user_services(self, user_id: str, step: int) -> Dict[str, Any]:
"""Initialize user-specific services based on onboarding step."""
services = {
"ai_services": {"enabled": False, "services": []},
"content_services": {"enabled": False, "services": []},
"research_services": {"enabled": False, "services": []},
"integration_services": {"enabled": False, "services": []}
}
try:
# Step 1: AI Services
if step >= 1:
services["ai_services"]["enabled"] = True
services["ai_services"]["services"] = ["gemini", "exa", "copilotkit"]
self._setup_user_ai_services(user_id)
# Step 2: Content Services
if step >= 2:
services["content_services"]["enabled"] = True
services["content_services"]["services"] = ["content_analysis", "style_detection"]
self._setup_user_content_services(user_id)
# Step 3: Research Services
if step >= 3:
services["research_services"]["enabled"] = True
services["research_services"]["services"] = ["web_research", "fact_checking"]
self._setup_user_research_services(user_id)
# Step 5: Integration Services
if step >= 5:
services["integration_services"]["enabled"] = True
services["integration_services"]["services"] = ["wix", "linkedin", "wordpress"]
self._setup_user_integration_services(user_id)
return services
except Exception as e:
logger.error(f"Error initializing user services: {e}")
return services
def _setup_user_ai_services(self, user_id: str):
"""Set up AI services for the user."""
# Create user-specific AI service configuration
user_config = {
"gemini": {
"enabled": True,
"model": "gemini-pro",
"max_tokens": 4000,
"temperature": 0.7
},
"exa": {
"enabled": True,
"search_depth": "standard",
"max_results": 10
},
"copilotkit": {
"enabled": True,
"assistant_type": "content",
"context_window": 8000
}
}
# Store in user workspace
self.workspace_manager.update_user_config(user_id, {
"ai_services": user_config
})
def _setup_user_content_services(self, user_id: str):
"""Set up content services for the user."""
# Create content analysis configuration
content_config = {
"style_analysis": {
"enabled": True,
"analysis_depth": "comprehensive"
},
"content_generation": {
"enabled": True,
"templates": ["blog", "social", "email"]
},
"quality_checking": {
"enabled": True,
"checks": ["grammar", "tone", "readability"]
}
}
self.workspace_manager.update_user_config(user_id, {
"content_services": content_config
})
def _setup_user_research_services(self, user_id: str):
"""Set up research services for the user."""
# Create research configuration
research_config = {
"web_research": {
"enabled": True,
"sources": ["exa", "serper"],
"max_results": 20
},
"fact_checking": {
"enabled": True,
"verification_level": "standard"
},
"content_validation": {
"enabled": True,
"checks": ["accuracy", "relevance", "freshness"]
}
}
self.workspace_manager.update_user_config(user_id, {
"research_services": research_config
})
def _setup_user_integration_services(self, user_id: str):
"""Set up integration services for the user."""
# Create integration configuration
integration_config = {
"wix": {
"enabled": False,
"connected": False,
"auto_publish": False
},
"linkedin": {
"enabled": False,
"connected": False,
"auto_schedule": False
},
"wordpress": {
"enabled": False,
"connected": False,
"auto_publish": False
}
}
self.workspace_manager.update_user_config(user_id, {
"integration_services": integration_config
})
def get_user_environment_status(self, user_id: str) -> Dict[str, Any]:
"""Get current user environment status."""
try:
workspace = self.workspace_manager.get_user_workspace(user_id)
if not workspace:
return {"error": "User workspace not found"}
progress = get_onboarding_progress_for_user(user_id)
return {
"user_id": user_id,
"onboarding_step": progress.current_step,
"workspace_exists": True,
"workspace_path": workspace["workspace_path"],
"config": workspace["config"],
"last_updated": datetime.now().isoformat()
}
except Exception as e:
logger.error(f"Error getting user environment status: {e}")
return {"error": str(e)}
def upgrade_user_environment(self, user_id: str, new_step: int) -> Dict[str, Any]:
"""Upgrade user environment when they progress in onboarding."""
try:
logger.info(f"Upgrading environment for user {user_id} to step {new_step}")
# Get current status
current_status = self.get_user_environment_status(user_id)
current_step = current_status.get("onboarding_step", 1)
if new_step <= current_step:
return {"message": "No upgrade needed", "current_step": current_step}
# Set up new features
setup_status = self.workspace_manager.setup_progressive_features(user_id, new_step)
services_status = self._initialize_user_services(user_id, new_step)
return {
"user_id": user_id,
"upgraded_from_step": current_step,
"upgraded_to_step": new_step,
"new_features": setup_status["features_enabled"],
"services": services_status,
"upgraded_at": datetime.now().isoformat()
}
except Exception as e:
logger.error(f"Error upgrading user environment: {e}")
raise
def cleanup_user_environment(self, user_id: str) -> bool:
"""Clean up user environment (for account deletion)."""
try:
return self.workspace_manager.cleanup_user_workspace(user_id)
except Exception as e:
logger.error(f"Error cleaning up user environment: {e}")
return False