feat: Version 3.6.2 - Correctifs tâches #17-20
- #17: Amélioration gestion des secteurs et statistiques - #18: Optimisation services API et logs - #19: Corrections Flutter widgets et repositories - #20: Fix création passage - détection automatique ope_users.id vs users.id Suppression dossier web/ (migration vers app Flutter) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -89,7 +89,75 @@ PUT /api/users/123 // users.id
|
||||
1. **Reçus fiscaux** : PDF auto (<5KB) pour dons, envoi email queue
|
||||
2. **Logos entités** : Upload PNG/JPG, redimensionnement 250x250px, base64
|
||||
3. **Migration** : Endpoints REST par entité (9 phases)
|
||||
4. **CRONs** : Email queue (*/5), cleanup sécurité (2h), Stripe devices (dim 3h)
|
||||
4. **CRONs** : Email queue (*/5), cleanup sécurité (2h)
|
||||
|
||||
## 📊 Statistiques Events (Admin Flutter)
|
||||
|
||||
### Architecture
|
||||
|
||||
**Principe** : Stats pré-agrégées en SQL + détail JSONL à la demande
|
||||
|
||||
| Source | Usage | Performance |
|
||||
|--------|-------|-------------|
|
||||
| Table `event_stats_daily` | Dashboard, graphiques, tendances | Instantané (~1ms) |
|
||||
| Fichiers JSONL | Détail événements (clic sur stat) | Paginé (~50-100ms) |
|
||||
|
||||
### Flux de données
|
||||
|
||||
1. **EventLogService** écrit les événements dans `/logs/events/YYYY-MM-DD.jsonl`
|
||||
2. **CRON nightly** agrège J-1 dans `event_stats_daily`
|
||||
3. **API** sert les stats agrégées (SQL) ou le détail paginé (JSONL)
|
||||
4. **Flutter Admin** affiche dashboard avec drill-down
|
||||
|
||||
### Table d'agrégation
|
||||
|
||||
**`event_stats_daily`** : Une ligne par (date, entité, type d'événement)
|
||||
|
||||
| Colonne | Description |
|
||||
|---------|-------------|
|
||||
| `stat_date` | Date des stats |
|
||||
| `entity_id` | Entité (NULL = global super-admin) |
|
||||
| `event_type` | Type événement (login_success, passage_created, etc.) |
|
||||
| `count` | Nombre d'occurrences |
|
||||
| `sum_amount` | Somme montants (passages) |
|
||||
| `unique_users` | Utilisateurs distincts |
|
||||
| `metadata` | JSON agrégé (top secteurs, erreurs fréquentes, etc.) |
|
||||
|
||||
### Endpoints API
|
||||
|
||||
| Endpoint | Période | Source | Taille réponse |
|
||||
|----------|---------|--------|----------------|
|
||||
| `GET /events/stats/summary` | Jour courant | SQL | ~1 KB |
|
||||
| `GET /events/stats/daily` | Plage dates | SQL | ~5 KB |
|
||||
| `GET /events/stats/weekly` | Calculé depuis daily | SQL | ~2 KB |
|
||||
| `GET /events/stats/monthly` | Calculé depuis daily | SQL | ~1 KB |
|
||||
| `GET /events/details` | Détail paginé | JSONL | ~10 KB |
|
||||
|
||||
### Optimisations transfert Flutter
|
||||
|
||||
- **Pagination** : 50 events max par requête détail
|
||||
- **Champs filtrés** : Pas d'IP ni user_agent complet dans les réponses
|
||||
- **Compression gzip** : -70% sur JSON
|
||||
- **Cache HTTP** : ETag sur stats (changent 1x/jour)
|
||||
- **Calcul hebdo/mensuel** : À la volée depuis `daily` (pas de tables supplémentaires)
|
||||
|
||||
### Types d'événements agrégés
|
||||
|
||||
| Catégorie | Events |
|
||||
|-----------|--------|
|
||||
| **Auth** | login_success, login_failed, logout |
|
||||
| **Passages** | passage_created, passage_updated, passage_deleted |
|
||||
| **Secteurs** | sector_created, sector_updated, sector_deleted |
|
||||
| **Users** | user_created, user_updated, user_deleted |
|
||||
| **Entités** | entity_created, entity_updated, entity_deleted |
|
||||
| **Opérations** | operation_created, operation_updated, operation_deleted |
|
||||
| **Stripe** | stripe_payment_created, stripe_payment_success, stripe_payment_failed, stripe_payment_cancelled, stripe_terminal_error |
|
||||
|
||||
### Accès et sécurité
|
||||
|
||||
- **Rôle requis** : Admin entité (role_id = 2) ou Super-admin (role_id = 1)
|
||||
- **Isolation** : Admin voit uniquement les stats de son entité
|
||||
- **Super-admin** : Accès global (entity_id = NULL dans requêtes)
|
||||
|
||||
## 🚀 Déploiement
|
||||
|
||||
@@ -172,4 +240,4 @@ DELETE FROM operations WHERE id = 850;
|
||||
|
||||
---
|
||||
|
||||
**Mis à jour : 26 Octobre 2025**
|
||||
**Mis à jour : 22 Décembre 2025**
|
||||
|
||||
Reference in New Issue
Block a user