Added documentation for the auto-population feature and the analytics integration.
This commit is contained in:
@@ -278,9 +278,22 @@ class OnboardingDatabaseService:
|
||||
return True
|
||||
|
||||
except SQLAlchemyError as e:
|
||||
logger.error(f"Error saving API key: {e}")
|
||||
error_msg = f"Database error saving API key for user {user_id}, provider {provider}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
session_db.rollback()
|
||||
return False
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical database error: API key for {provider} could not be saved. Please try again or contact support.") from e
|
||||
except Exception as e:
|
||||
error_msg = f"Unexpected error saving API key for user {user_id}, provider {provider}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
if session_db:
|
||||
session_db.rollback()
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical error: API key for {provider} could not be saved. Please try again or contact support.") from e
|
||||
|
||||
def get_api_keys(self, user_id: str, db: Session = None) -> Dict[str, str]:
|
||||
"""Get all API keys for user."""
|
||||
@@ -308,13 +321,23 @@ class OnboardingDatabaseService:
|
||||
session_db = db or self.db
|
||||
if not session_db:
|
||||
raise ValueError("Database session required")
|
||||
|
||||
|
||||
logger.info(f"🔍 save_website_analysis: Received analysis_data keys: {list(analysis_data.keys()) if analysis_data else 'None'}")
|
||||
logger.info(f"🔍 save_website_analysis: analysis_data.website: {analysis_data.get('website') if analysis_data else 'None'}")
|
||||
logger.info(f"🔍 save_website_analysis: analysis_data.analysis exists: {bool(analysis_data.get('analysis')) if analysis_data else 'None'}")
|
||||
|
||||
try:
|
||||
session = self.get_or_create_session(user_id, session_db)
|
||||
# Normalize payload. Step 2 sometimes sends { website, analysis: {...} }
|
||||
# while DB expects flattened fields. Support both shapes.
|
||||
incoming = analysis_data or {}
|
||||
nested = incoming.get('analysis') if isinstance(incoming.get('analysis'), dict) else None
|
||||
|
||||
logger.info(f"🔍 save_website_analysis: incoming keys: {list(incoming.keys()) if incoming else 'None'}")
|
||||
logger.info(f"🔍 save_website_analysis: nested (analysis) exists: {bool(nested)}")
|
||||
if nested:
|
||||
logger.info(f"🔍 save_website_analysis: nested keys: {list(nested.keys()) if nested else 'None'}")
|
||||
|
||||
normalized = {
|
||||
'website_url': incoming.get('website') or incoming.get('website_url') or '',
|
||||
'writing_style': (nested or incoming).get('writing_style'),
|
||||
@@ -329,6 +352,13 @@ class OnboardingDatabaseService:
|
||||
'style_guidelines': (nested or incoming).get('style_guidelines'),
|
||||
'status': (nested or incoming).get('status', incoming.get('status', 'completed')),
|
||||
}
|
||||
|
||||
logger.info(f"🔍 save_website_analysis: normalized.website_url: {normalized.get('website_url')}")
|
||||
logger.info(f"🔍 save_website_analysis: normalized.writing_style: {bool(normalized.get('writing_style'))}")
|
||||
logger.info(f"🔍 save_website_analysis: normalized.content_characteristics: {bool(normalized.get('content_characteristics'))}")
|
||||
logger.info(f"🔍 save_website_analysis: normalized.target_audience: {bool(normalized.get('target_audience'))}")
|
||||
logger.info(f"🔍 save_website_analysis: normalized.content_type: {bool(normalized.get('content_type'))}")
|
||||
logger.info(f"🔍 save_website_analysis: normalized.recommended_settings: {bool(normalized.get('recommended_settings'))}")
|
||||
|
||||
# Check if analysis already exists
|
||||
existing = session_db.query(WebsiteAnalysis).filter(
|
||||
@@ -385,9 +415,23 @@ class OnboardingDatabaseService:
|
||||
return True
|
||||
|
||||
except SQLAlchemyError as e:
|
||||
logger.error(f"Error saving website analysis: {e}")
|
||||
error_msg = f"Database error saving website analysis for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
logger.error(f" Data keys: {list(analysis_data.keys()) if analysis_data else 'None'}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
session_db.rollback()
|
||||
return False
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical database error: Website analysis could not be saved. Please try again or contact support.") from e
|
||||
except Exception as e:
|
||||
error_msg = f"Unexpected error saving website analysis for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
if session_db:
|
||||
session_db.rollback()
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical error: Website analysis could not be saved. Please try again or contact support.") from e
|
||||
|
||||
def get_website_analysis(self, user_id: str, db: Session = None) -> Optional[Dict[str, Any]]:
|
||||
"""Get website analysis for user."""
|
||||
@@ -419,7 +463,12 @@ class OnboardingDatabaseService:
|
||||
session_db = db or self.db
|
||||
if not session_db:
|
||||
raise ValueError("Database session required")
|
||||
|
||||
|
||||
logger.info(f"🔍 save_research_preferences: Received preferences keys: {list(preferences.keys()) if preferences else 'None'}")
|
||||
logger.info(f"🔍 save_research_preferences: preferences.research_depth: {preferences.get('research_depth') if preferences else 'None'}")
|
||||
logger.info(f"🔍 save_research_preferences: preferences.content_types: {preferences.get('content_types') if preferences else 'None'}")
|
||||
logger.info(f"🔍 save_research_preferences: preferences.target_audience: {preferences.get('target_audience') if preferences else 'None'}")
|
||||
|
||||
try:
|
||||
session = self.get_or_create_session(user_id, session_db)
|
||||
|
||||
@@ -460,9 +509,23 @@ class OnboardingDatabaseService:
|
||||
return True
|
||||
|
||||
except SQLAlchemyError as e:
|
||||
logger.error(f"Error saving research preferences: {e}")
|
||||
error_msg = f"Database error saving research preferences for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
logger.error(f" Data keys: {list(preferences.keys()) if preferences else 'None'}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
session_db.rollback()
|
||||
return False
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical database error: Research preferences could not be saved. Please try again or contact support.") from e
|
||||
except Exception as e:
|
||||
error_msg = f"Unexpected error saving research preferences for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
if session_db:
|
||||
session_db.rollback()
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical error: Research preferences could not be saved. Please try again or contact support.") from e
|
||||
|
||||
def save_persona_data(self, user_id: str, persona_data: Dict[str, Any], db: Session = None) -> bool:
|
||||
"""Save persona data for user."""
|
||||
@@ -502,9 +565,23 @@ class OnboardingDatabaseService:
|
||||
return True
|
||||
|
||||
except SQLAlchemyError as e:
|
||||
logger.error(f"Error saving persona data: {e}")
|
||||
error_msg = f"Database error saving persona data for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
logger.error(f" Data keys: {list(persona_data.keys()) if persona_data else 'None'}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
session_db.rollback()
|
||||
return False
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical database error: Persona data could not be saved. Please try again or contact support.") from e
|
||||
except Exception as e:
|
||||
error_msg = f"Unexpected error saving persona data for user {user_id}: {str(e)}"
|
||||
logger.error(f"❌ {error_msg}")
|
||||
import traceback
|
||||
logger.error(f" Traceback: {traceback.format_exc()}")
|
||||
if session_db:
|
||||
session_db.rollback()
|
||||
# BLOCKING ERROR: Raise exception to prevent step completion
|
||||
raise Exception(f"Critical error: Persona data could not be saved. Please try again or contact support.") from e
|
||||
|
||||
def get_research_preferences(self, user_id: str, db: Session = None) -> Optional[Dict[str, Any]]:
|
||||
"""Get research preferences for user."""
|
||||
|
||||
Reference in New Issue
Block a user