docs: Marquer les tâches #76 et le bug de purge Hive comme terminés

Tâche #76: Accès admin limité web uniquement -  Terminé 26/01
Bug: Boxes Hive non purgées à la connexion -  Corrigé 26/01

Corrections aujourd'hui:
- #15: Nouveau membre non synchronisé (sécurité + sync + API)
- #76: Accès admin limité web uniquement
- Bug: Nettoyage automatique des boxes Hive à la connexion
- Optimisation: operation_id en session (évite requêtes SQL)
This commit is contained in:
2026-01-26 17:42:33 +01:00
parent 957386f78c
commit 495ba046ec
9 changed files with 44 additions and 14 deletions

View File

@@ -1 +1 @@
26.01.2606 26.01.2607

View File

@@ -1172,7 +1172,7 @@
"languageVersion": "3.0" "languageVersion": "3.0"
} }
], ],
"generated": "2026-01-26T16:20:37.426166Z", "generated": "2026-01-26T16:39:01.556621Z",
"generator": "pub", "generator": "pub",
"generatorVersion": "3.5.4", "generatorVersion": "3.5.4",
"flutterRoot": "file:///opt/flutter", "flutterRoot": "file:///opt/flutter",

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
// ⚠️ AUTO-GENERATED FILE - DO NOT EDIT MANUALLY // ⚠️ AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
// This file is automatically generated by deploy-app.sh script // This file is automatically generated by deploy-app.sh script
// Last update: 2026-01-26 17:20:35 // Last update: 2026-01-26 17:39:00
// Source: ../VERSION file // Source: ../VERSION file
// //
// GEOSECTOR App Version Service // GEOSECTOR App Version Service
@@ -8,10 +8,10 @@
class AppInfoService { class AppInfoService {
// Version number (format: YY.MM.DDNN - auto-incremented on each DEV deploy) // Version number (format: YY.MM.DDNN - auto-incremented on each DEV deploy)
static const String version = '26.01.2606'; static const String version = '26.01.2607';
// Build number (version without dots: YYMMDDNN) // Build number (version without dots: YYMMDDNN)
static const String buildNumber = '26012606'; static const String buildNumber = '26012607';
// Full version string (format: vYY.MM.DDNN+YYMMDDNN) // Full version string (format: vYY.MM.DDNN+YYMMDDNN)
static String get fullVersion => 'v$version+$buildNumber'; static String get fullVersion => 'v$version+$buildNumber';

View File

@@ -42,14 +42,19 @@ class DataLoadingService extends ChangeNotifier {
// Chat boxes removed - handled by new chat module // Chat boxes removed - handled by new chat module
/// Traite toutes les données reçues de l'API lors du login /// Traite toutes les données reçues de l'API lors du login
/// Les boxes sont déjà propres, on charge juste les données /// Nettoie d'abord les boxes puis charge les nouvelles données
Future<void> processLoginData(Map<String, dynamic> apiResult) async { Future<void> processLoginData(Map<String, dynamic> apiResult) async {
try { try {
debugPrint('📊 Début du chargement des données (boxes déjà propres)...'); debugPrint('📊 Début du chargement des données...');
// Vérifier que les boxes sont ouvertes // Vérifier que les boxes sont ouvertes
_verifyBoxesAreOpen(); _verifyBoxesAreOpen();
// Nettoyer les boxes AVANT de charger les nouvelles données
// Cela évite que les données d'un ancien utilisateur persistent
await _clearAllDataBoxes();
debugPrint('🧹 Boxes nettoyées pour le nouvel utilisateur');
// Charger les données directement (les boxes sont vides et propres) // Charger les données directement (les boxes sont vides et propres)
if (apiResult['clients'] != null) { if (apiResult['clients'] != null) {
await _processClients(apiResult['clients']); await _processClients(apiResult['clients']);
@@ -111,6 +116,31 @@ class DataLoadingService extends ChangeNotifier {
debugPrint('✅ Toutes les boîtes requises sont ouvertes'); debugPrint('✅ Toutes les boîtes requises sont ouvertes');
} }
/// Nettoie les boxes de données utilisateur lors d'une nouvelle connexion
/// Ne touche PAS aux requêtes en attente (pendingRequests) pour la sync hors ligne
Future<void> _clearAllDataBoxes() async {
try {
debugPrint('🧹 Nettoyage des boxes de données utilisateur...');
// Vider toutes les boxes de données métier
await _operationBox.clear();
await _sectorBox.clear();
await _passageBox.clear();
await _membreBox.clear();
await _userSectorBox.clear();
await _amicaleBox.clear();
// Ne PAS toucher aux boxes suivantes:
// - pendingRequests (requêtes en attente de sync)
// - users (géré par CurrentUserService)
debugPrint('✅ Boxes de données nettoyées');
} catch (e) {
debugPrint('❌ Erreur lors du nettoyage des boxes: $e');
rethrow;
}
}
/// Nettoie complètement toutes les données lors du logout /// Nettoie complètement toutes les données lors du logout
Future<void> cleanDataAfterLogout() async { Future<void> cleanDataAfterLogout() async {
try { try {

View File

@@ -3,8 +3,8 @@ FLUTTER_ROOT=/opt/flutter
FLUTTER_APPLICATION_PATH=/home/pierre/dev/geosector/app FLUTTER_APPLICATION_PATH=/home/pierre/dev/geosector/app
COCOAPODS_PARALLEL_CODE_SIGN=true COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_BUILD_DIR=build FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_NAME=26.01.2606 FLUTTER_BUILD_NAME=26.01.2607
FLUTTER_BUILD_NUMBER=26012606 FLUTTER_BUILD_NUMBER=26012607
DART_OBFUSCATION=false DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true TRACK_WIDGET_CREATION=true
TREE_SHAKE_ICONS=false TREE_SHAKE_ICONS=false

View File

@@ -4,8 +4,8 @@ export "FLUTTER_ROOT=/opt/flutter"
export "FLUTTER_APPLICATION_PATH=/home/pierre/dev/geosector/app" export "FLUTTER_APPLICATION_PATH=/home/pierre/dev/geosector/app"
export "COCOAPODS_PARALLEL_CODE_SIGN=true" export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_BUILD_DIR=build" export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=26.01.2606" export "FLUTTER_BUILD_NAME=26.01.2607"
export "FLUTTER_BUILD_NUMBER=26012606" export "FLUTTER_BUILD_NUMBER=26012607"
export "DART_OBFUSCATION=false" export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true" export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false" export "TREE_SHAKE_ICONS=false"

View File

@@ -1,7 +1,7 @@
name: geosector_app name: geosector_app
description: 'GEOSECTOR - Gestion de distribution des calendriers par secteurs géographiques pour les amicales de pompiers' description: 'GEOSECTOR - Gestion de distribution des calendriers par secteurs géographiques pour les amicales de pompiers'
publish_to: 'none' publish_to: 'none'
version: 26.01.2606+26012606 version: 26.01.2607+26012607
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'

View File

@@ -94,7 +94,7 @@
| Date | ID | Tâche | Cat | Statut | | Date | ID | Tâche | Cat | Statut |
|-------|------|-------------------------------------|--------|--------| |-------|------|-------------------------------------|--------|--------|
| 15/02 | `#80` | FAQ gérée depuis Super-Admin | ADMIN | | | 15/02 | `#80` | FAQ gérée depuis Super-Admin | ADMIN | |
| 15/02 | `#76` | Accès admin limité web uniquement | ADMIN | | | 15/02 | `#76` | Accès admin limité web uniquement | ADMIN | ✅ Terminé 26/01 |
| 15/02 | `#82` | Optimiser purge données | ADMIN | | | 15/02 | `#82` | Optimiser purge données | ADMIN | |
| 16/02 | `#83` | Filtres liste amicales | ADMIN | | | 16/02 | `#83` | Filtres liste amicales | ADMIN | |
| 16/02 | `#85` | Distinguer amicales actives | ADMIN | | | 16/02 | `#85` | Distinguer amicales actives | ADMIN | |