ded5c899f7
- Use PartnerStatus.APPROVED.value instead of hardcoded 'approved' - Extract shared deep_link/web_link helpers to cabinet/utils/links.py - Add _safe_div() helper for None-safe division - Add try/except error handling on campaign endpoints - Use model_fields_set for PATCH-style field detection - Replace deprecated class Config with ConfigDict(from_attributes=True) - Remove unnecessary selectinload(registrations) from campaign list - Extract _calc_change to module-level in partner_stats_service - Add composite indexes for stats queries on Subscription, Transaction, SubscriptionConversion, and TrafficPurchase models