From da6f746b093be8cdbf4e2889c50b35087fbc90de Mon Sep 17 00:00:00 2001 From: Fringg Date: Sun, 8 Feb 2026 20:29:53 +0300 Subject: [PATCH] feat: add endpoint for updating user referral commission percent POST /{user_id}/referral-commission allows admins to set individual referral commission percentage (0-100) or null for system default. --- app/cabinet/routes/admin_users.py | 37 +++++++++++++++++++++++++++++++ app/cabinet/schemas/users.py | 15 +++++++++++++ 2 files changed, 52 insertions(+) diff --git a/app/cabinet/routes/admin_users.py b/app/cabinet/routes/admin_users.py index e6d0496d..a1e47487 100644 --- a/app/cabinet/routes/admin_users.py +++ b/app/cabinet/routes/admin_users.py @@ -59,6 +59,8 @@ from ..schemas.users import ( UpdateBalanceResponse, UpdatePromoGroupRequest, UpdatePromoGroupResponse, + UpdateReferralCommissionRequest, + UpdateReferralCommissionResponse, UpdateRestrictionsRequest, UpdateRestrictionsResponse, UpdateSubscriptionRequest, @@ -1362,6 +1364,41 @@ async def update_user_promo_group( ) +# === Referral Commission === + + +@router.post('/{user_id}/referral-commission', response_model=UpdateReferralCommissionResponse) +async def update_user_referral_commission( + user_id: int, + request: UpdateReferralCommissionRequest, + admin: User = Depends(get_current_admin_user), + db: AsyncSession = Depends(get_cabinet_db), +): + """Update user's individual referral commission percentage.""" + user = await get_user_by_id(db, user_id) + if not user: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail='User not found', + ) + + old_commission = user.referral_commission_percent + user.referral_commission_percent = request.commission_percent + user.updated_at = datetime.utcnow() + await db.commit() + + logger.info( + f'Admin {admin.id} changed referral commission for user {user_id}: {old_commission} -> {request.commission_percent}' + ) + + return UpdateReferralCommissionResponse( + success=True, + old_commission_percent=old_commission, + new_commission_percent=request.commission_percent, + message='Referral commission updated', + ) + + # === Delete User === diff --git a/app/cabinet/schemas/users.py b/app/cabinet/schemas/users.py index 099de4f1..eb9bf55d 100644 --- a/app/cabinet/schemas/users.py +++ b/app/cabinet/schemas/users.py @@ -348,6 +348,21 @@ class UpdatePromoGroupResponse(BaseModel): message: str +class UpdateReferralCommissionRequest(BaseModel): + """Request to update user referral commission percent.""" + + commission_percent: int | None = Field(None, ge=0, le=100, description='Referral commission percent (null for default)') + + +class UpdateReferralCommissionResponse(BaseModel): + """Response after referral commission update.""" + + success: bool + old_commission_percent: int | None = None + new_commission_percent: int | None = None + message: str + + class DeleteUserRequest(BaseModel): """Request to delete user."""