Push do áudio diário: fonte única de verdade

O que aconteceu

Usuários recebiam de 2 a 4 push notifications duplicadas do áudio diário no mesmo dia.

Causa raiz

Dois caminhos independentes criavam notificações send_to_all=True para o mesmo dia:

  1. O signal de post_save de Audio criava uma no available_time (quando o áudio era salvo)
  2. A task do Celery Beat criava outra no push_time (o horário de envio configurado, default 07:00)

Correção

O signal de post_save de Audio não cria mais push notifications. Apenas enqueue_daily_audio_push (Celery Beat, a cada 60s) é responsável por criar a push do áudio diário.

  • Signal on_audio_save: apenas invalida a chave de cache "audio_daily"
  • Task enqueue_daily_audio_push: única criadora da Notification do push diário. É idempotente via last_push_sent_on em DailyAudioSettings

Como evitar

Para qualquer envio diário/agendado, manter um único produtor. Se um signal e uma task periódica podem produzir o mesmo efeito, o signal cuida só de invalidação de cache e a task periódica é a dona do envio — com controle de idempotência persistido.

Referências