Fix onboarding process not getting the subcription plan
This commit is contained in:
@@ -179,6 +179,57 @@ class OnboardingRepository:
|
||||
await self.db.rollback()
|
||||
return False
|
||||
|
||||
async def save_step_data(
|
||||
self,
|
||||
user_id: str,
|
||||
step_name: str,
|
||||
step_data: Dict[str, Any]
|
||||
) -> UserOnboardingProgress:
|
||||
"""Save data for a specific step without marking it as completed"""
|
||||
try:
|
||||
# Get existing step or create new one
|
||||
existing_step = await self.get_user_step(user_id, step_name)
|
||||
|
||||
if existing_step:
|
||||
# Update existing step data (merge with existing data)
|
||||
merged_data = {**(existing_step.step_data or {}), **step_data}
|
||||
|
||||
stmt = update(UserOnboardingProgress).where(
|
||||
and_(
|
||||
UserOnboardingProgress.user_id == user_id,
|
||||
UserOnboardingProgress.step_name == step_name
|
||||
)
|
||||
).values(
|
||||
step_data=merged_data,
|
||||
updated_at=datetime.now(timezone.utc)
|
||||
).returning(UserOnboardingProgress)
|
||||
|
||||
result = await self.db.execute(stmt)
|
||||
await self.db.commit()
|
||||
return result.scalars().first()
|
||||
else:
|
||||
# Create new step with data but not completed
|
||||
return await self.upsert_user_step(
|
||||
user_id=user_id,
|
||||
step_name=step_name,
|
||||
completed=False,
|
||||
step_data=step_data
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error saving step data for {step_name}, user {user_id}: {e}")
|
||||
await self.db.rollback()
|
||||
raise
|
||||
|
||||
async def get_step_data(self, user_id: str, step_name: str) -> Optional[Dict[str, Any]]:
|
||||
"""Get data for a specific step"""
|
||||
try:
|
||||
step = await self.get_user_step(user_id, step_name)
|
||||
return step.step_data if step else None
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting step data for {step_name}, user {user_id}: {e}")
|
||||
return None
|
||||
|
||||
async def get_completion_stats(self) -> Dict[str, Any]:
|
||||
"""Get completion statistics across all users"""
|
||||
try:
|
||||
@@ -187,7 +238,7 @@ class OnboardingRepository:
|
||||
select(UserOnboardingSummary).count()
|
||||
)
|
||||
total_users = total_result.scalar()
|
||||
|
||||
|
||||
# Get completed users
|
||||
completed_result = await self.db.execute(
|
||||
select(UserOnboardingSummary)
|
||||
@@ -195,13 +246,13 @@ class OnboardingRepository:
|
||||
.count()
|
||||
)
|
||||
completed_users = completed_result.scalar()
|
||||
|
||||
|
||||
return {
|
||||
"total_users_in_onboarding": total_users,
|
||||
"fully_completed_users": completed_users,
|
||||
"completion_rate": (completed_users / total_users * 100) if total_users > 0 else 0
|
||||
}
|
||||
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting completion stats: {e}")
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user