68bc8eb57c
The admin endpoint wrote only to the legacy users.promo_group_id FK, which got overwritten by sync_user_primary_promo_group on the next transaction. Now writes to user_promo_groups M2M table (authoritative source) and re-derives the FK via sync. Also re-raise exceptions in _sync_user_primary_promo_group to prevent committing inconsistent state between M2M and FK columns.