From 4759af64a5236d8e014856af1574c597675bc588 Mon Sep 17 00:00:00 2001 From: Yves Gugger Date: Thu, 11 Dec 2025 20:13:46 +0100 Subject: [PATCH] fix: Prevent duplicate subscription creation on admin register - Check if subscription already exists before creating Tycoon subscription for admin users - Fixes UNIQUE constraint failed: subscriptions.user_id error --- backend/app/api/auth.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py index b74e586..58a251f 100644 --- a/backend/app/api/auth.py +++ b/backend/app/api/auth.py @@ -106,17 +106,24 @@ async def register( user.is_verified = True # Auto-verify admins await db.commit() - # Give admin Tycoon subscription + # Give admin Tycoon subscription (only if no subscription exists) from app.models.subscription import Subscription, SubscriptionTier, SubscriptionStatus, TIER_CONFIG - tycoon_config = TIER_CONFIG.get(SubscriptionTier.TYCOON, {}) - subscription = Subscription( - user_id=user.id, - tier=SubscriptionTier.TYCOON, - status=SubscriptionStatus.ACTIVE, - max_domains=tycoon_config.get("domain_limit", 500), + from sqlalchemy import select + + # Check if subscription already exists + existing_sub = await db.execute( + select(Subscription).where(Subscription.user_id == user.id) ) - db.add(subscription) - await db.commit() + if not existing_sub.scalar_one_or_none(): + tycoon_config = TIER_CONFIG.get(SubscriptionTier.TYCOON, {}) + subscription = Subscription( + user_id=user.id, + tier=SubscriptionTier.TYCOON, + status=SubscriptionStatus.ACTIVE, + max_domains=tycoon_config.get("domain_limit", 500), + ) + db.add(subscription) + await db.commit() # Generate verification token verification_token = secrets.token_urlsafe(32)