FK do áudio para a notificação agendada
TLDR: Adiciona uma FK em
Audioapontando para suaNotificationagendada, para que o reagendamento cancele apenas a notificação daquele áudio, e não todas as pendentes.
Contexto
Quando um áudio é criado ou atualizado, _schedule_audio_notification cria uma Notification com scheduled_at futuro. Antes, um filtro amplo cancelava todas as notificações de áudio pendentes em qualquer save — fazendo com que áudios de dias diferentes cancelassem as notificações uns dos outros. Esse filtro foi removido, mas agora reagendar um áudio deixa a notificação antiga pendente (com o horário errado) ao lado da nova.
A correção é dar ao Audio uma FK para a sua própria Notification. No reagendamento, apenas aquela notificação específica é cancelada antes de criar a nova. Notification permanece totalmente genérica — não conhece Audio.
Objetivos
Audiopode referenciar sua notificação agendada- Reagendar um áudio cancela apenas a própria notificação pendente
- Criar 4 áudios em 4 dias diferentes mantém as 4 notificações pendentes
- O model
Notificationpermanece inalterado
Fora de escopo
— (não registrado na spec original)
Mudanças
apps/audios/models/audio.py— adicionarscheduled_notification = ForeignKey(Notification, null=True, blank=True, on_delete=SET_NULL, related_name="+")apps/audios/migrations/— nova migration para a FKapps/audios/signals.py— em_schedule_audio_notification, cancelaraudio.scheduled_notificationse estiver pendente, criar a nova notificação e salvar a referência no áudiotests/audios/test_tasks_signals_apps.py— teste do cenário de reagendamento (notificação antiga cancelada, nova criada) e ajuste do helper_make_audiose necessário
Como verificar
- Criar o áudio A para hoje e o áudio B para amanhã — ambas as notificações permanecem
pending - Atualizar o
available_timedo áudio A — a notificação antiga viracanceled, uma novapendingé criada e a notificação do áudio B não é tocada - Rodar
dispatch_scheduled_notificationsdepois que o horário do áudio A passar — apenas a notificação do áudio A é despachada
Documentação
Nenhuma mudança de documentação necessária.