E-mails et notifications
L'API prévient les gens de deux façons : la cloche du site et de l'application (les notifications), et les e-mails. Une notification est toujours envoyée aussi par e-mail, et les deux disent la même chose.
Les notifications
Une notification dit à quelqu'un ce qu'une autre personne a fait sur ses heures.
Type (kind) | Quand | Lien |
|---|---|---|
hours_changed | un manager a créé, modifié ou supprimé une de ses journées | « My Changes » |
correction_reviewed | sa demande de correction a été acceptée ou refusée | Clocking |
absence_recorded | une absence a été enregistrée pour lui | ses heures |
Jamais sa propre action
Personne n'est prévenu de ce qu'il a fait lui-même : la clause notify(%User{id: id}, %User{id: id}, …) (même personne des deux côtés) ne fait rien. Et une correction acceptée ne déclenche qu'un avis (« demande acceptée »), pas un second « tes heures ont changé ».
Enregistrée, puis envoyée
Notifications.notify/5 :
- enregistre la notification dans
notifications, une fois l'action sauvegardée ; - l'envoie par e-mail, dans la langue de la personne.
Si l'e-mail échoue (service indisponible), l'échec est noté dans le journal du serveur, mais rien n'est annulé : la modification des heures et la notification restent. Un e-mail perdu ne doit pas faire échouer le travail d'un manager.
Lire la cloche
| Route | Effet |
|---|---|
GET /api/notifications | les 30 plus récentes, de la personne connectée seulement |
PUT /api/notifications/read | les marque toutes lues (read_at) |
Il n'y a pas d'identifiant de personne dans ces routes : on ne voit et ne lit jamais que les siennes.
Les e-mails
| Quand | À qui | |
|---|---|---|
| Invitation | le GM crée un compte | la personne invitée (lien de 7 jours) |
| Mot de passe oublié | POST /api/auth/forgot-password | le compte (lien d'1 heure) |
| Mot de passe changé | après un changement | le compte : s'il n'en est pas l'auteur, il le sait tout de suite |
| Confirmer une nouvelle adresse | le GM demande à changer d'e-mail | la nouvelle adresse (lien d'1 heure) |
| Adresse changée | le lien a été ouvert | l'ancienne adresse |
| Notification | voir plus haut | la personne concernée |
Une seule mise en page
Tous les e-mails passent par EmailLayout : un titre, une salutation, des paragraphes, un bouton facultatif, une note, et le même pied de page. Chaque e-mail existe en deux versions : HTML, et texte brut pour les messageries et les lecteurs d'écran qui n'affichent pas le HTML. Ajouter un e-mail revient donc à écrire son contenu, jamais sa mise en forme (UserNotifier).
Où partent-ils ?
| Environnement | Envoi |
|---|---|
| Production | par Brevo (BREVO_API_KEY, voir les variables) |
| Développement | nulle part : ils s'affichent sur http://localhost:4000/dev/mailbox |
| Tests | nulle part : les tests vérifient qu'ils ont été « envoyés » (assert_email_sent) |
Les fichiers
| Fichier | Rôle |
|---|---|
lib/timemanager/notifications.ex | ce qui déclenche une notification, enregistrement et envoi |
lib/timemanager/notifications/text.ex | la phrase de chaque notification |
lib/timemanager/accounts/user_notifier.ex | le contenu de chaque e-mail |
lib/timemanager/accounts/email_layout.ex | la mise en page commune, HTML et texte |
lib/timemanager/mailer.ex | l'envoi (Swoosh) |