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

  1. Criar execução com scheduled_time = agora - 5 min → deve receber notificação
  2. Criar execução com scheduled_time = agora - 15 min → não deve receber notificação
  3. Rodar send_pending_notifications() e confirmar o comportamento via unit test

Documentação

Nenhuma mudança de documentação necessária.