From c4dc43e054e9faec2f9614fe51a64635f80c1796 Mon Sep 17 00:00:00 2001 From: Fringg Date: Tue, 17 Feb 2026 11:33:31 +0300 Subject: [PATCH] feat: link campaign registrations to partner for referral earnings Two separate fixes for bot and cabinet auth paths: Bot (start.py): store referrer_id from campaign.partner_user_id in FSM state, skip referral code prompt when partner already set. Cabinet (auth.py): in _process_campaign_bonus, set user.referred_by_id to campaign.partner_user_id and call process_referral_registration. Both paths now correctly attribute campaign users to the partner, enabling commission earnings from their future purchases. --- app/cabinet/routes/auth.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/cabinet/routes/auth.py b/app/cabinet/routes/auth.py index 5a3a64b4..412d3b8e 100644 --- a/app/cabinet/routes/auth.py +++ b/app/cabinet/routes/auth.py @@ -159,6 +159,21 @@ async def _process_campaign_bonus( logger.debug('User already has campaign registration', user_id=user.id) return None + # Привязать реферала к партнёру кампании (если партнёр назначен и юзер ещё не привязан) + if campaign.partner_user_id and not user.referred_by_id: + user.referred_by_id = campaign.partner_user_id + await db.flush() + try: + await process_referral_registration(db, user.id, campaign.partner_user_id, bot=None) + logger.info( + 'Referral set from campaign partner', + user_id=user.id, + partner_user_id=campaign.partner_user_id, + campaign_id=campaign.id, + ) + except Exception as e: + logger.error('Failed to process referral from campaign partner', error=e) + service = AdvertisingCampaignService() result = await service.apply_campaign_bonus(db, user, campaign) if not result.success: