From 532b057f59610e9f7dc97ba88be265d7e858fd90 Mon Sep 17 00:00:00 2001 From: Urtzi Alfaro Date: Thu, 25 Dec 2025 20:20:16 +0100 Subject: [PATCH] fix demo load --- gateway/app/middleware/demo_middleware.py | 2 + services/auth/app/api/onboarding_progress.py | 110 +++++++++++++++++-- 2 files changed, 105 insertions(+), 7 deletions(-) diff --git a/gateway/app/middleware/demo_middleware.py b/gateway/app/middleware/demo_middleware.py index 23ee8c52..93096e96 100644 --- a/gateway/app/middleware/demo_middleware.py +++ b/gateway/app/middleware/demo_middleware.py @@ -49,6 +49,7 @@ DEMO_ALLOWED_OPERATIONS = { "/api/v1/production/batches", "/api/v1/tenants/batch/sales-summary", "/api/v1/tenants/batch/production-summary", + "/api/v1/auth/me/onboarding/complete", # Allow completing onboarding (no-op for demos) # Note: Forecast generation is explicitly blocked (see DEMO_BLOCKED_PATHS) ], @@ -56,6 +57,7 @@ DEMO_ALLOWED_OPERATIONS = { "/api/v1/pos/sales/*", "/api/v1/orders/*", "/api/v1/inventory/stock/*", + "/api/v1/auth/me/onboarding/step", # Allow onboarding step updates (no-op for demos) ], # Blocked operations diff --git a/services/auth/app/api/onboarding_progress.py b/services/auth/app/api/onboarding_progress.py index 4fe94245..a835ffac 100644 --- a/services/auth/app/api/onboarding_progress.py +++ b/services/auth/app/api/onboarding_progress.py @@ -519,8 +519,37 @@ async def get_user_progress( """Get current user's onboarding progress""" try: + user_id = current_user["user_id"] + is_demo = current_user.get("is_demo", False) + + # DEMO FIX: Demo users don't need onboarding - return fully completed progress + # Demo tenants are pre-configured through cloning, so onboarding is not required + if is_demo or user_id.startswith("demo-user-"): + logger.info(f"Demo user {user_id} accessing onboarding progress - returning completed state") + + # Create all steps as completed for demo users + demo_steps = [] + for step_name in ONBOARDING_STEPS: + demo_steps.append(OnboardingStepStatus( + step_name=step_name, + completed=True, + completed_at=datetime.now(timezone.utc), + data={"auto_completed": True, "demo_mode": True} + )) + + return UserProgress( + user_id=user_id, + steps=demo_steps, + current_step="completion", + next_step=None, + completion_percentage=100.0, + fully_completed=True, + last_updated=datetime.now(timezone.utc) + ) + + # Regular user flow onboarding_service = OnboardingService(db) - progress = await onboarding_service.get_user_progress(current_user["user_id"]) + progress = await onboarding_service.get_user_progress(user_id) return progress except Exception as e: @@ -552,6 +581,31 @@ async def get_user_progress_by_id( ) try: + # DEMO FIX: Handle demo users - return fully completed progress + if user_id.startswith("demo-user-"): + logger.info(f"Service requesting demo user {user_id} onboarding progress - returning completed state") + + # Create all steps as completed for demo users + demo_steps = [] + for step_name in ONBOARDING_STEPS: + demo_steps.append(OnboardingStepStatus( + step_name=step_name, + completed=True, + completed_at=datetime.now(timezone.utc), + data={"auto_completed": True, "demo_mode": True} + )) + + return UserProgress( + user_id=user_id, + steps=demo_steps, + current_step="completion", + next_step=None, + completion_percentage=100.0, + fully_completed=True, + last_updated=datetime.now(timezone.utc) + ) + + # Regular user flow onboarding_service = OnboardingService(db) progress = await onboarding_service.get_user_progress(user_id) return progress @@ -570,15 +624,43 @@ async def update_onboarding_step( db: AsyncSession = Depends(get_db) ): """Update a specific onboarding step""" - + try: + user_id = current_user["user_id"] + is_demo = current_user.get("is_demo", False) + + # DEMO FIX: Demo users don't update onboarding - return completed progress + if is_demo or user_id.startswith("demo-user-"): + logger.info(f"Demo user {user_id} attempting to update onboarding step - returning completed state (no-op)") + + # Create all steps as completed for demo users + demo_steps = [] + for step_name in ONBOARDING_STEPS: + demo_steps.append(OnboardingStepStatus( + step_name=step_name, + completed=True, + completed_at=datetime.now(timezone.utc), + data={"auto_completed": True, "demo_mode": True} + )) + + return UserProgress( + user_id=user_id, + steps=demo_steps, + current_step="completion", + next_step=None, + completion_percentage=100.0, + fully_completed=True, + last_updated=datetime.now(timezone.utc) + ) + + # Regular user flow onboarding_service = OnboardingService(db) progress = await onboarding_service.update_step( - current_user["user_id"], + user_id, update_request ) return progress - + except HTTPException: raise except Exception as e: @@ -636,12 +718,26 @@ async def complete_onboarding( db: AsyncSession = Depends(get_db) ): """Complete entire onboarding process""" - + try: + user_id = current_user["user_id"] + is_demo = current_user.get("is_demo", False) + + # DEMO FIX: Demo users don't need to complete onboarding - return success + if is_demo or user_id.startswith("demo-user-"): + logger.info(f"Demo user {user_id} attempting to complete onboarding - returning success (no-op)") + return { + "success": True, + "message": "Onboarding already completed for demo account", + "optional_steps_skipped": [], + "demo_mode": True + } + + # Regular user flow onboarding_service = OnboardingService(db) - result = await onboarding_service.complete_onboarding(current_user["user_id"]) + result = await onboarding_service.complete_onboarding(user_id) return result - + except HTTPException: raise except Exception as e: