Atualmente, a edição em massa de emblemas enquanto os remove de detentores anteriores resulta em pessoas tendo um emblema removido e imediatamente concedido novamente, se estiverem na interseção de detentores anteriores e futuros.
Isso resulta em uma experiência de usuário confusa, pois os usuários recebem uma notificação sobre o recebimento do emblema, embora nada tenha mudado.
Além disso, isso entra em conflito com um de nossos casos de uso: gostaríamos de descartar emblemas obsoletos e conceder novos, passando a lista atualizada de detentores, enquanto mantemos os outros detentores e a data de concessão inalteradas.
Em termos de funcionalidade, a mudança seria uma melhoria estrita: ao carregar uma lista vazia primeiro, o comportamento antigo é recuperado.
Ao falar em ‘passar a lista atualizada’ e ‘fazer upload de uma lista vazia’, parece que você está trabalhando no console do Rails, talvez com uma lista de users.id?
Se for esse o caso, ajudaria obter a lista dos atuais titulares do distintivo para que você possa excluí-los das suas operações de remoção/concessão?
(Consulta do explorador de dados)
-- [params]
-- badge_id :badge
SELECT
u.id AS user_id
FROM user_badges ub
JOIN users u ON u.id = ub.user_id
JOIN badges b ON b.id = ub.badge_id
WHERE ub.badge_id = :badge
Com essa lista exportada, talvez algumas consultas e scripts possam:
Encontrar a interseção entre os atuais titulares do distintivo e sua lista de ‘futuros titulares’.
Remover esses usuários da interseção da sua lista de ‘futuros titulares’.
Revogar o distintivo de qualquer usuário não presente na interseção.
Fazer upload da lista editada de ‘futuros titulares’ para conceder o distintivo apenas aos novos titulares.
(Há até mesmo uma possibilidade de fazer tudo isso dentro do Rails, mas não sou muito forte nessa área.)