ALwrity + Wordpress + Wix + GSC integration
This commit is contained in:
120
backend/api/onboarding_utils/endpoints_core.py
Normal file
120
backend/api/onboarding_utils/endpoints_core.py
Normal file
@@ -0,0 +1,120 @@
|
||||
from typing import Dict, Any
|
||||
from datetime import datetime
|
||||
from loguru import logger
|
||||
from fastapi import HTTPException, Depends
|
||||
|
||||
from middleware.auth_middleware import get_current_user
|
||||
|
||||
from .endpoint_models import (
|
||||
get_onboarding_progress_for_user,
|
||||
)
|
||||
|
||||
|
||||
def health_check():
|
||||
return {"status": "healthy", "timestamp": datetime.now().isoformat()}
|
||||
|
||||
|
||||
async def initialize_onboarding(current_user: Dict[str, Any] = Depends(get_current_user)):
|
||||
try:
|
||||
user_id = str(current_user.get('id'))
|
||||
progress = get_onboarding_progress_for_user(user_id)
|
||||
|
||||
steps_data = []
|
||||
for step in progress.steps:
|
||||
# Include step data for completed steps, especially persona data (step 4) and research data (step 3)
|
||||
step_data = None
|
||||
if step.data:
|
||||
if step.step_number == 4: # Personalization step with persona data
|
||||
# Include persona data for step 4 to ensure it's available for step 5
|
||||
step_data = step.data
|
||||
logger.info(f"Including persona data for step 4: {len(str(step_data))} chars")
|
||||
elif step.step_number == 3: # Research step with research preferences
|
||||
# Include research preferences for step 3 to ensure it's available for step 4
|
||||
step_data = step.data
|
||||
logger.info(f"Including research data for step 3: {len(str(step_data))} chars")
|
||||
|
||||
steps_data.append({
|
||||
"step_number": step.step_number,
|
||||
"title": step.title,
|
||||
"description": step.description,
|
||||
"status": step.status.value,
|
||||
"completed_at": step.completed_at,
|
||||
"has_data": step.data is not None and len(step.data) > 0 if step.data else False,
|
||||
"data": step_data, # Include actual data for critical steps
|
||||
})
|
||||
|
||||
next_step = progress.get_next_incomplete_step()
|
||||
|
||||
response_data = {
|
||||
"user": {
|
||||
"id": user_id,
|
||||
"email": current_user.get('email'),
|
||||
"first_name": current_user.get('first_name'),
|
||||
"last_name": current_user.get('last_name'),
|
||||
"clerk_user_id": user_id,
|
||||
},
|
||||
"onboarding": {
|
||||
"is_completed": progress.is_completed,
|
||||
"current_step": progress.current_step,
|
||||
"completion_percentage": progress.get_completion_percentage(),
|
||||
"next_step": next_step,
|
||||
"started_at": progress.started_at,
|
||||
"last_updated": progress.last_updated,
|
||||
"completed_at": progress.completed_at,
|
||||
"can_proceed_to_final": progress.can_complete_onboarding(),
|
||||
"steps": steps_data,
|
||||
},
|
||||
"session": {
|
||||
"session_id": user_id,
|
||||
"initialized_at": datetime.now().isoformat(),
|
||||
},
|
||||
}
|
||||
|
||||
logger.info(
|
||||
f"Batch init successful for user {user_id}: step {progress.current_step}/{len(progress.steps)}"
|
||||
)
|
||||
return response_data
|
||||
except Exception as e:
|
||||
logger.error(f"Error in initialize_onboarding: {str(e)}", exc_info=True)
|
||||
raise HTTPException(status_code=500, detail=f"Failed to initialize onboarding: {str(e)}")
|
||||
|
||||
|
||||
async def get_onboarding_status(current_user: Dict[str, Any]):
|
||||
try:
|
||||
from api.onboarding_utils.step_management_service import StepManagementService
|
||||
step_service = StepManagementService()
|
||||
return await step_service.get_onboarding_status(current_user)
|
||||
except Exception as e:
|
||||
from fastapi import HTTPException
|
||||
from loguru import logger
|
||||
logger.error(f"Error getting onboarding status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Internal server error")
|
||||
|
||||
|
||||
async def get_onboarding_progress_full(current_user: Dict[str, Any]):
|
||||
try:
|
||||
from api.onboarding_utils.step_management_service import StepManagementService
|
||||
step_service = StepManagementService()
|
||||
return await step_service.get_onboarding_progress_full(current_user)
|
||||
except Exception as e:
|
||||
from fastapi import HTTPException
|
||||
from loguru import logger
|
||||
logger.error(f"Error getting onboarding progress: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Internal server error")
|
||||
|
||||
|
||||
async def get_step_data(step_number: int, current_user: Dict[str, Any]):
|
||||
try:
|
||||
from api.onboarding_utils.step_management_service import StepManagementService
|
||||
step_service = StepManagementService()
|
||||
return await step_service.get_step_data(step_number, current_user)
|
||||
except Exception as e:
|
||||
from fastapi import HTTPException
|
||||
from loguru import logger
|
||||
logger.error(f"Error getting step data: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Internal server error")
|
||||
|
||||
|
||||
__all__ = [name for name in globals().keys() if not name.startswith('_')]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user