feat: WebSocket temps réel + Finance Workflow + corrections

- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
This commit is contained in:
dahoud
2026-03-15 02:12:17 +00:00
parent bbc409de9d
commit e8ad874015
635 changed files with 58160 additions and 20674 deletions

View File

@@ -0,0 +1,215 @@
# 🧪 Guide de Tests - Kafka + WebSocket UnionFlow
## ✅ Statut Actuel
Backend démarré avec succès :
- ✅ 5 Producers Kafka connectés
- ✅ 5 Consumers Kafka connectés (group: `unionflow-websocket-server`)
- ✅ WebSocket endpoint actif sur `/ws/dashboard`
- ✅ Aucune erreur `UNKNOWN_TOPIC_OR_PARTITION`
---
## 🧪 Test 1 : Swagger UI
### Action
Ouvre ton navigateur : **http://localhost:8085/q/swagger-ui**
### Résultat attendu
- Page Swagger UI affichée
- Liste de tous les endpoints REST
- Section "Schemas" avec les DTOs
---
## 🧪 Test 2 : WebSocket - Test HTML
### Action
1. Ouvre le fichier HTML dans ton navigateur :
```
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka\test-websocket.html
```
2. Clique sur le bouton **"🔗 Connecter"**
### Résultat attendu
✅ **Status change vers "✅ Connecté"**
✅ **Message dans la console** : "Connexion WebSocket établie avec succès !"
✅ **Dans les logs backend** : Tu devrais voir :
```
INFO WebSocket connection opened from ...
```
### Test Ping/Pong
1. Clique sur **"📤 Envoyer Ping"**
2. Tu devrais recevoir un **pong** du serveur
---
## 🧪 Test 3 : Publier un Event Kafka → Vérifier Réception WebSocket
### Étape 1 : Ouvrir 3 fenêtres
1. **Fenêtre 1** : Logs backend Quarkus (déjà ouverte)
2. **Fenêtre 2** : Navigateur avec `test-websocket.html` (WebSocket connecté)
3. **Fenêtre 3** : PowerShell pour publier l'event
### Étape 2 : Publier un Event de Test
Dans PowerShell (Fenêtre 3) :
```powershell
cd C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka
.\test-event.bat
```
**Ou manuellement** :
```cmd
echo {"eventType":"APPROVAL_APPROVED","timestamp":"2026-03-14T19:30:00Z","organizationId":"test-org-123","data":{"id":"test-1","amount":50000}} | docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh --topic unionflow.finance.approvals --bootstrap-server localhost:9092
```
### Résultat attendu
#### Dans les logs backend (Fenêtre 1) :
```
INFO [dev.lions.unionflow.server.messaging.KafkaEventConsumer] (smallrye-kafka-consumer-thread-1)
Received finance approval event: key=..., value={"eventType":"APPROVAL_APPROVED",...}
```
#### Dans le WebSocket HTML (Fenêtre 2) :
```
[19:30:15] RECEIVED: APPROVAL_APPROVED
{
"eventType": "APPROVAL_APPROVED",
"timestamp": "2026-03-14T19:30:00Z",
"organizationId": "test-org-123",
"data": { "id": "test-1", "amount": 50000 }
}
```
✅ **Si tu vois l'event dans le WebSocket HTML → SUCCÈS COMPLET !**
---
## 🧪 Test 4 : Vérifier les Topics Kafka
### Lister tous les messages d'un topic
```cmd
docker exec kafka /opt/kafka/bin/kafka-console-consumer.sh --topic unionflow.finance.approvals --bootstrap-server localhost:9092 --from-beginning
```
Appuie sur `Ctrl+C` pour arrêter.
### Compter les messages
```cmd
docker exec kafka /opt/kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic unionflow.finance.approvals
```
---
## 🧪 Test 5 : Application Mobile Flutter
### Lancer l'app mobile
```bash
cd C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-mobile-apps
flutter run --dart-define=ENV=dev
```
### Résultat attendu dans la console mobile
```
I/flutter (12345): ✅ WebSocket connecté
I/flutter (12345): DashboardBloc: WebSocket initialisé
I/flutter (12345): DashboardBloc: WebSocket connecté - Temps réel actif
```
### Test complet Mobile + Backend
1. **Mobile** : Ouvre le Dashboard
2. **Backend** : Publie un event via Swagger ou Kafka console
3. **Mobile** : Le dashboard devrait se rafraîchir automatiquement !
---
## 🧪 Test 6 : End-to-End avec Swagger UI
### Scénario : Approbation Finance
1. **Ouvre Swagger UI** : http://localhost:8085/q/swagger-ui
2. **Trouve l'endpoint** : `POST /api/v1/finance/approvals/{id}/approve`
3. **Exécute la requête** avec un ID de test
4. **Vérifie les logs backend** :
```
INFO KafkaEventProducer: Publishing approval event...
INFO KafkaEventConsumer: Received finance approval event...
INFO WebSocketBroadcastService: Broadcasting to X clients...
```
5. **Vérifie le WebSocket HTML** : L'event devrait apparaître !
---
## 📊 Résumé des Tests
| Test | Objectif | Status |
|------|----------|--------|
| 1. Swagger UI | Accès API REST | ⏳ À tester |
| 2. WebSocket HTML | Connexion WebSocket | ⏳ À tester |
| 3. Kafka → WebSocket | Flux complet | ⏳ À tester |
| 4. Kafka Topics | Vérification messages | ⏳ À tester |
| 5. Mobile Flutter | WebSocket mobile | ⏳ À tester |
| 6. End-to-End Swagger | Workflow complet | ⏳ À tester |
---
## 🐛 Troubleshooting
### WebSocket ne se connecte pas
**Vérifier** :
```cmd
netstat -an | findstr 8085
```
Doit afficher : `0.0.0.0:8085 ... LISTENING`
### Events Kafka non reçus
**Vérifier les consumers** :
```cmd
docker exec kafka /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group unionflow-websocket-server
```
Doit afficher :
- LAG = 0 (tous les messages consommés)
- 5 topics assignés au group
### Backend logs
**Augmenter le niveau de log** dans `application.properties` :
```properties
quarkus.log.category."dev.lions.unionflow.server.messaging".level=DEBUG
```
---
## ✅ Succès Final
Quand tous ces tests passent :
- ✅ Backend publie events dans Kafka
- ✅ Consumers consomment events
- ✅ WebSocket broadcast aux clients
- ✅ Mobile reçoit events en temps réel
- ✅ Dashboard auto-refresh
**→ Architecture Event-Driven 100% FONCTIONNELLE ! 🎉**
---
**Commence par le Test 2 (WebSocket HTML)** - c'est le plus visuel et le plus rapide pour vérifier que tout fonctionne !