Commit d82a976
Système de notifications proactives par email (cron interne node-cron +
nodemailer existant) et push navigateur (service worker + Web Push/VAPID),
avec réglage par type dans /parametres.
Résolution de conflits (la PR était calée sur origin/main, main local avait
avancé de deux commits) :
- src/instrumentation.ts : register() installait déjà le journal global des
erreurs serveur (f73b0be). Les deux briques cohabitent désormais dans le même
hook, chacune isolée en try/catch, et onRequestError est conservé.
- prisma/schema.prisma : relation pushSubscriptions ajoutée à côté de accounts.
Correctifs appliqués à la relecture :
- itp-semaine : `semaineCourante` numérotait la semaine avec `getWeek`
(firstWeekContainsDate: 1) alors que `annee` venait de `getISOWeekYear` et que
tout le reste de Gleba lit/écrit en semaine ISO. C'est exactement la
divergence corrigée par QA cmswxqnaz (assistant-helpers.ts) : dès que le
1er janvier tombe un vendredi, samedi ou dimanche (2027, 2028, 2032…), le
couple (annee, semaine) désignait une autre semaine que la fenêtre calculée
par `calculerDateDepuisSemaine`, faussant la clé anti-redondance
`tache-itp-semaine:AAAA-Sww` et le « Sww » affiché. Passage à `getISOWeek`,
et les deux tests qui figeaient l'ancienne convention sont corrigés.
- config/scheduler : NOTIF_METEO_INTERVAL_MIN est borné à 1440 mais la valeur
partait dans le champ « minutes » d'une expression cron (`*/120 * * * *`),
invalide au-delà de 59. node-cron levait, et comme le scan est planifié AVANT
le résumé quotidien, le résumé n'était plus planifié du tout. Nouvelle
`getMeteoCronExpression()` qui bascule sur le champ « heures » dès 60 min,
couverte par src/lib/notifications/config.test.ts.
- sender/templates : ces emails sont récurrents et non transactionnels ; ils
partent désormais avec les en-têtes List-Unsubscribe (RFC 8058) et un lien de
désabonnement 1 clic en pied de page, via src/lib/unsubscribe.ts déjà utilisé
par les campagnes. `emailOptOut` était déjà respecté côté destinataires.
Vérifié sur le résultat du merge : tsc sans nouvelle erreur, 920 tests
(157 fichiers) au vert, gate lint 519 < 640.
Reste à faire, hors périmètre de cette PR (dépend de travaux non commités) :
les requêtes d'irrigation des notifications ne filtrent pas `perimee: false`
(colonne absente de main), à ajouter quand la péremption d'irrigation sera
commitée, sinon les passages abandonnés seront rappelés.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 files changed
Lines changed: 5284 additions & 16 deletions
File tree
- prisma
- migrations
- 20260817100432_add_stock_min_thresholds
- 20260817101415_add_push_subscriptions
- public
- scripts
- src
- app
- api/notifications/push
- subscribe
- vapid-public-key
- parametres
- components/notifications
- lib
- notifications
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
33 | 48 | | |
34 | 49 | | |
35 | 50 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
56 | 63 | | |
57 | 64 | | |
58 | 65 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| 67 | + | |
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
| |||
79 | 80 | | |
80 | 81 | | |
81 | 82 | | |
| 83 | + | |
82 | 84 | | |
83 | 85 | | |
84 | 86 | | |
| |||
90 | 92 | | |
91 | 93 | | |
92 | 94 | | |
| 95 | + | |
93 | 96 | | |
94 | 97 | | |
95 | 98 | | |
96 | 99 | | |
97 | 100 | | |
98 | 101 | | |
99 | | - | |
| 102 | + | |
100 | 103 | | |
101 | 104 | | |
102 | 105 | | |
Lines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
Lines changed: 19 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
0 commit comments