# Tasks — Spec 007 Mobile Push Notifications

**Status:** 📋 Backlog (draft)  
**Prioridade:** P1  
**API alvo:** `0.9.0-desk-push-ntfy` → `0.9.1-desk-push-pwa`

---

## Fase A — ntfy por usuário (MVP)

- [ ] **T001** Schema: `desk_users.ntfy_topic` estável + `push_ntfy_enabled`
- [ ] **T002** Migrar lógica de `ntfy_topic` de registration-only para user profile
- [ ] **T003** `GET /api/v1/push/settings`
- [ ] **T004** `POST /api/v1/push/ntfy/enable` · `disable`
- [ ] **T005** `POST /api/v1/push/test` (notificação teste)
- [ ] **T006** UI Minha conta — seção Notificações (toggle + link + QR)
- [ ] **T007** `push_service.py` — `notify_user()`, `notify_role()`
- [ ] **T008** Hook: ticket Wazuh criado → push `noc` + `ops_lead` + root
- [ ] **T009** Hook: pedido cadastro → push root
- [ ] **T010** Rate limit push · logs · falha silenciosa
- [ ] **T011** Testes manuais Android/iOS ntfy
- [ ] **T012** Docs quickstart + env `DESK_NTFY_BASE_URL`

## Fase B — Web Push PWA

- [ ] **T020** `manifest.json` + ícones Ligbox Ops
- [ ] **T021** Service Worker `sw.js` (push + notificationclick)
- [ ] **T022** Tabela `push_subscriptions`
- [ ] **T023** VAPID keys (env) + `pywebpush` no requirements
- [ ] **T024** `POST /api/v1/push/subscribe` · DELETE
- [ ] **T025** UI «Ativar notificações neste dispositivo»
- [ ] **T026** Integrar `push_service` dual-channel (ntfy + webpush)
- [ ] **T027** Teste iOS Safari PWA + Android Chrome

## Fase C — Futuro (fora MVP 007)

- [ ] **T030** Preferências por tipo de evento
- [ ] **T031** FCM para app nativo
- [ ] **T032** ntfy self-hosted (VM122 ou VM108)
- [ ] **T033** OneSignal avaliação (se FCM complexo demais)

---

## Dependências

- Spec 003 ✅ auth JWT
- Spec 004 ✅ Minha conta UI · ntfy OTP base

---

## Env vars (previstas)

```env
DESK_NTFY_BASE_URL=https://ntfy.sh
DESK_VAPID_PUBLIC_KEY=
DESK_VAPID_PRIVATE_KEY=
DESK_VAPID_MAILTO=ligbox-ops@ligbox.com.br
DESK_PUSH_ENABLED=true
```
