You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Le service crée **deux paires de notifications** (SMS + EMAIL) :
70
-
- Pour l’expéditeur (role = `SENDER`).
71
-
- Pour le destinataire (role = `RECEIVER`).
72
-
- Les messages sont envoyés :
73
-
- par SMS via Twilio sur `phone`.
74
-
- par email via `mailService.sendEmail` sur `email`.
75
-
- Le `context` des entités `Notification` contient notamment `montant` et `role`.
76
-
77
-
#### b) Notification simple (autres types)
66
+
# Notification-Service
67
+
68
+
Service de notifications (e-mail & SMS & OTP) développé en Node.js, Express et TypeScript.
69
+
70
+
Ce README décrit l'installation, la configuration, les endpoints, les variables d'environnement et les bonnes pratiques pour déployer et tester le service.
71
+
72
+
Table des matières
73
+
- Présentation
74
+
- Prérequis
75
+
- Installation
76
+
- Variables d'environnement
77
+
- Commandes utiles
78
+
- Endpoints et exemples
79
+
- Health checks
80
+
- Docker / Compose
81
+
- Débogage et logs
82
+
- Notes de sécurité
83
+
84
+
---
85
+
86
+
Présentation
87
+
------------
88
+
Ce service reçoit des requêtes HTTP pour envoyer des notifications et générer/vérifier des OTP. Il s'intègre avec :
89
+
- PostgreSQL (TypeORM)
90
+
- RabbitMQ (échange partagé, queue privée)
91
+
- Twilio (SMS)
92
+
- Nodemailer (e-mail)
93
+
94
+
Le code organise les responsabilités en contrôleurs, services, entités, utilitaires et messaging (publisher/consumer).
95
+
96
+
Prérequis
97
+
---------
98
+
- Node.js >= 18
99
+
- npm
100
+
- PostgreSQL accessible (ou instance locale)
101
+
- RabbitMQ accessible (ou instance locale)
102
+
- Compte Twilio (si SMS en production) ou configuration de mock
103
+
- Compte e-mail (Gmail ou SMTP compatible) pour envoi d'e-mails
104
+
105
+
Installation
106
+
------------
107
+
1. Cloner le dépôt et positionnez-vous dans le dossier du service :
108
+
109
+
```bash
110
+
cd notification_service
111
+
```
112
+
113
+
2. Installer les dépendances :
114
+
115
+
```bash
116
+
npm install
117
+
```
118
+
119
+
3. Compiler TypeScript :
120
+
121
+
```bash
122
+
npm run build
123
+
```
124
+
125
+
4. Lancer en développement (reload automatique) :
126
+
127
+
```bash
128
+
npm run dev
129
+
```
130
+
131
+
Variables d'environnement
132
+
------------------------
133
+
Les variables attendues par le service (fichier `.env` recommandé) :
134
+
135
+
- SERVICE_PORT: port d'écoute HTTP (ex: 8000)
136
+
- SERVICE_VERSION: version déployée (optionnel)
137
+
- COMMIT_SHA: sha du commit déployé (optionnel)
138
+
139
+
- PostgreSQL:
140
+
- DB_HOST
141
+
- DB_PORT (par défaut 5432)
142
+
- DB_USER
143
+
- DB_PASSWORD
144
+
- DB_NAME
145
+
146
+
- RabbitMQ:
147
+
- RABBITMQ_URL (ex: amqp://user:pass@host:5672)
148
+
- RABBITMQ_EXCHANGE (nom de l'exchange partagé)
149
+
- RABBITMQ_QUEUE (nom de la queue principale pour ce service)
150
+
151
+
- Twilio (si SMS) :
152
+
- TWILIO_ACCOUNT_SID
153
+
- TWILIO_AUTH_TOKEN
154
+
- TWILIO_PHONE_NUMBER
155
+
156
+
- E-mail (Nodemailer) :
157
+
- MAIL_USER
158
+
- MAIL_PASS
159
+
160
+
- Health / diagnostics (optionnel) :
161
+
- HEALTH_CHECK_TIMEOUT_MS (ms, défaut 1000)
162
+
- HEALTH_CACHE_TTL_MS (ms, défaut 5000)
163
+
- HEALTH_EXPOSE_ERRORS (true|false, défaut false)
164
+
165
+
Commandes utiles
166
+
----------------
167
+
-`npm run dev` — démarre avec `ts-node-dev` (dev hot-reload)
168
+
-`npm run build` — compile TypeScript vers `dist/`
169
+
-`npm start` — exécute `node src/server.ts` (production si compilé)
170
+
171
+
Endpoints et exemples
172
+
---------------------
173
+
Base URL: `http://{host}:{SERVICE_PORT}`
174
+
175
+
Health
176
+
-`GET /health` — liveness minimal (retourne OK + uptime)
177
+
-`GET /health/ready` — readiness : vérifie PostgreSQL et RabbitMQ, retourne 200 ou 503. Réponse contient `components.db` et `components.rabbitmq`.
178
+
179
+
Notifications
180
+
-`POST /api/notifications/envoyer` — envoie une notification.
181
+
- Corps possible (exemples) :
182
+
183
+
Transfer (expéditeur + destinataire envoyés sur SMS + email si fournis) :
- Vérifier les erreurs de connexion à RabbitMQ et PostgreSQL au démarrage.
273
+
- En cas d'erreurs d'envoi SMS/Email, les exceptions sont loggées et le statut de la notification est mis à `ECHEC`.
274
+
275
+
Sécurité et bonnes pratiques
276
+
---------------------------
277
+
- Ne pas exposer `HEALTH_EXPOSE_ERRORS=true` en production si les messages d'erreur contiennent des données sensibles.
278
+
- Utiliser des secrets manager pour les identifiants (DB, Twilio, MAIL_PASS).
279
+
- Désactiver `synchronize: true` (TypeORM) en production et utiliser des migrations contrôlées.
280
+
281
+
Contribution
282
+
------------
283
+
Pour proposer des améliorations :
284
+
1. Créer une branche feature
285
+
2. Ajouter tests / valider localement
286
+
3. Ouvrir une Pull Request vers `develop`
287
+
288
+
Support
289
+
-------
290
+
Si tu veux, je peux :
291
+
- ajouter des exemples Postman
292
+
- créer un `docker-compose.dev.yml` complet pour démarrer la stack locale
293
+
- ajouter des tests unitaires pour `NotificationService` / `OtpService`
294
+
295
+
---
296
+
297
+
Fait avec ❤️ — Notification-Service
78
298
79
-
```json
80
-
{
81
-
"type": "ALERT_SECURITE",
82
-
"user": {
83
-
"email": "client@mail.com",
84
-
"phone": "+22322222222"
85
-
},
86
-
"content": "Connexion suspecte détectée."
87
-
}
88
-
```
89
-
90
-
-`type` peut être l’une des valeurs de `TypeNotification` (sauf `"transfer"` qui utilise le schéma dédié).
91
-
-`user.email` et `user.phone` sont obligatoires.
92
-
- Le service envoie systématiquement la notification **à la fois par SMS et par email**.
93
-
94
-
En cas de JSON invalide (champ manquant / mauvais type), le contrôleur renvoie :
95
-
96
-
```json
97
-
{
98
-
"success": false,
99
-
"message": "Corps de requête invalide",
100
-
"errors": { ...détail Zod... }
101
-
}
102
-
```
103
-
104
-
### 2. Génération d’OTP
105
-
106
-
`POST /api/notifications/otp/generate`
107
-
108
-
Le service génère un code OTP (4 chiffres), l’enregistre en base avec une expiration (5 minutes) puis publie un événement `otp.verification` sur RabbitMQ. Désormais, il dépend **strictement** des coordonnées envoyées dans le JSON.
109
-
110
-
```json
111
-
{
112
-
"utilisateurId": "user-otp-1",
113
-
"canalNotification": "SMS",
114
-
"email": "userotp@mail.com",
115
-
"phone": "+22300000000"
116
-
}
117
-
```
118
-
119
-
-`utilisateurId`: identifiant métier (user id).
120
-
-`canalNotification`: `"SMS"` ou `"EMAIL"`.
121
-
-`email`: email du destinataire (obligatoire).
122
-
-`phone`: numéro du destinataire (obligatoire).
123
-
124
-
│ │ ├── Notification.ts # Modèle de données pour les notifications
0 commit comments