Add subcription feature
This commit is contained in:
@@ -1044,4 +1044,110 @@ async def delete_step_draft(
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to delete step draft"
|
||||
)
|
||||
|
||||
@router.get("/api/v1/auth/me/onboarding/subscription-parameters", response_model=Dict[str, Any])
|
||||
async def get_subscription_parameters(
|
||||
current_user: Dict[str, Any] = Depends(get_current_user_dep),
|
||||
db: AsyncSession = Depends(get_db)
|
||||
):
|
||||
"""
|
||||
Get subscription parameters saved during onboarding for tenant creation
|
||||
Returns all parameters needed for subscription processing: plan, billing cycle, coupon, etc.
|
||||
"""
|
||||
try:
|
||||
user_id = current_user["user_id"]
|
||||
is_demo = current_user.get("is_demo", False)
|
||||
|
||||
# DEMO FIX: Demo users get default subscription parameters
|
||||
if is_demo or user_id.startswith("demo-user-"):
|
||||
logger.info(f"Demo user {user_id} requesting subscription parameters - returning demo defaults")
|
||||
return {
|
||||
"subscription_plan": "professional",
|
||||
"billing_cycle": "monthly",
|
||||
"coupon_code": "DEMO2025",
|
||||
"payment_method_id": "pm_demo_test_123",
|
||||
"payment_customer_id": "cus_demo_test_123", # Demo payment customer ID
|
||||
"saved_at": datetime.now(timezone.utc).isoformat(),
|
||||
"demo_mode": True
|
||||
}
|
||||
|
||||
# Get subscription parameters from onboarding progress
|
||||
from app.repositories.onboarding_repository import OnboardingRepository
|
||||
onboarding_repo = OnboardingRepository(db)
|
||||
subscription_params = await onboarding_repo.get_subscription_parameters(user_id)
|
||||
|
||||
if not subscription_params:
|
||||
logger.warning(f"No subscription parameters found for user {user_id} - returning defaults")
|
||||
return {
|
||||
"subscription_plan": "starter",
|
||||
"billing_cycle": "monthly",
|
||||
"coupon_code": None,
|
||||
"payment_method_id": None,
|
||||
"payment_customer_id": None,
|
||||
"saved_at": datetime.now(timezone.utc).isoformat()
|
||||
}
|
||||
|
||||
logger.info(f"Retrieved subscription parameters for user {user_id}",
|
||||
subscription_plan=subscription_params["subscription_plan"],
|
||||
billing_cycle=subscription_params["billing_cycle"],
|
||||
coupon_code=subscription_params["coupon_code"])
|
||||
|
||||
return subscription_params
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting subscription parameters for user {current_user.get('user_id')}: {e}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to retrieve subscription parameters"
|
||||
)
|
||||
|
||||
@router.get("/api/v1/auth/users/{user_id}/onboarding/subscription-parameters", response_model=Dict[str, Any])
|
||||
async def get_user_subscription_parameters(
|
||||
user_id: str,
|
||||
current_user: Dict[str, Any] = Depends(get_current_user_dep),
|
||||
db: AsyncSession = Depends(get_db)
|
||||
):
|
||||
"""
|
||||
Get subscription parameters for a specific user (admin/service access)
|
||||
"""
|
||||
try:
|
||||
# Check permissions - only admins and services can access other users' data
|
||||
requester_id = current_user["user_id"]
|
||||
requester_roles = current_user.get("roles", [])
|
||||
is_service = current_user.get("is_service", False)
|
||||
|
||||
if not is_service and "super_admin" not in requester_roles and requester_id != user_id:
|
||||
logger.warning(f"Unauthorized access attempt to user {user_id} subscription parameters by {requester_id}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="Insufficient permissions to access other users' subscription parameters"
|
||||
)
|
||||
|
||||
# Get subscription parameters from onboarding progress
|
||||
from app.repositories.onboarding_repository import OnboardingRepository
|
||||
onboarding_repo = OnboardingRepository(db)
|
||||
subscription_params = await onboarding_repo.get_subscription_parameters(user_id)
|
||||
|
||||
if not subscription_params:
|
||||
logger.warning(f"No subscription parameters found for user {user_id} - returning defaults")
|
||||
return {
|
||||
"subscription_plan": "starter",
|
||||
"billing_cycle": "monthly",
|
||||
"coupon_code": None,
|
||||
"payment_method_id": None,
|
||||
"payment_customer_id": None,
|
||||
"saved_at": datetime.now(timezone.utc).isoformat()
|
||||
}
|
||||
|
||||
logger.info(f"Retrieved subscription parameters for user {user_id} by {requester_id}",
|
||||
subscription_plan=subscription_params["subscription_plan"])
|
||||
|
||||
return subscription_params
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting subscription parameters for user {user_id}: {e}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Failed to retrieve subscription parameters"
|
||||
)
|
||||
Reference in New Issue
Block a user