Janela de 10 minutos no envio de notificações de hábitos
TLDR: Limita o envio de notificações de hábitos a execuções agendadas nos últimos 10 minutos, evitando disparos tardios.
Contexto
O job send_habit_notifications roda a cada 60 segundos e chama HabitNotificationService.send_pending_notifications(). O filtro atual usa scheduled_time__lte=now, o que faz com que execuções agendadas horas antes (mas ainda pendentes e sem notificação) sejam processadas — enviando notificações fora de hora.
Objetivos
- Enviar notificações apenas para execuções agendadas nos últimos 10 minutos
- Ignorar silenciosamente execuções que passaram da janela (sem marcar como falha)
Fora de escopo
— (não registrado na spec original)
Mudanças
apps/habits/services.py — HabitNotificationService:
- Adicionar a constante NOTIFICATION_WINDOW = timedelta(minutes=10)
- No filtro de send_pending_notifications, adicionar a condição de limite inferior usando Q: scheduled_date > lower_bound.date() OR (scheduled_date = lower_bound.date() AND scheduled_time >= lower_bound.time()) — mesmo padrão já usado nos lembretes
Como verificar
- Criar execução com
scheduled_time = agora - 5 min→ deve receber notificação - Criar execução com
scheduled_time = agora - 15 min→ não deve receber notificação - Rodar
send_pending_notifications()e confirmar o comportamento via unit test
Documentação
Nenhuma mudança de documentação necessária.