feat: création services singleton et renommage Box
Services créés: ✅ CurrentUserService singleton pour utilisateur connecté ✅ CurrentAmicaleService singleton pour amicale courante ✅ ApiService transformé en singleton Box Hive: ✅ Renommage users -> user (plus logique) ✅ Migration automatique des données ✅ Services intégrés dans main.dart État: Services créés, prêt pour refactorisation repositories
This commit is contained in:
@@ -133,7 +133,110 @@ void _registerHiveAdapters() {
|
||||
/// Ouvre les boîtes Hive essentielles
|
||||
Future<void> _openEssentialHiveBoxes() async {
|
||||
final boxesToOpen = [
|
||||
{'name': AppKeys.usersBoxName, 'type': 'UserModel'},
|
||||
{'name': AppKeys.userBoxName, 'type': 'UserModel'},
|
||||
{'name': AppKeys.amicaleBoxName, 'type': 'AmicaleModel'},
|
||||
{'name': AppKeys.clientsBoxName, 'type': 'ClientModel'},
|
||||
{'name': AppKeys.settingsBoxName, 'type': 'dynamic'},
|
||||
{'name': AppKeys.chatConversationsBoxName, 'type': 'ConversationModel'},
|
||||
{'name': AppKeys.chatMessagesBoxName, 'type': 'MessageModel'},
|
||||
];
|
||||
|
||||
// Logique de migration de l'ancienne box users vers user
|
||||
try {
|
||||
// Vérifier si l'ancienne box users existe
|
||||
if (await _doesBoxExist(AppKeys.usersBoxNameOld)) {
|
||||
debugPrint('🔄 Migration détectée: box users -> user');
|
||||
|
||||
// Ouvrir l'ancienne box
|
||||
final oldBox = await Hive.openBox<UserModel>(AppKeys.usersBoxNameOld);
|
||||
|
||||
// Ouvrir la nouvelle box
|
||||
final newBox = await Hive.openBox<UserModel>(AppKeys.userBoxName);
|
||||
|
||||
// Migrer les données si la nouvelle box est vide
|
||||
if (oldBox.isNotEmpty && newBox.isEmpty) {
|
||||
debugPrint('📦 Migration des données users -> user...');
|
||||
|
||||
// Chercher l'utilisateur actuel dans l'ancienne box
|
||||
final userData = oldBox.get('current_user') ?? oldBox.values.firstOrNull;
|
||||
if (userData != null) {
|
||||
await newBox.put('current_user', userData);
|
||||
debugPrint('✅ Migration de users -> user réussie pour ${userData.email}');
|
||||
}
|
||||
}
|
||||
|
||||
// Fermer et supprimer l'ancienne box
|
||||
await oldBox.close();
|
||||
await Hive.deleteBoxFromDisk(AppKeys.usersBoxNameOld);
|
||||
debugPrint('🗑️ Ancienne box users supprimée');
|
||||
} else {
|
||||
// Ouvrir normalement la nouvelle box
|
||||
await Hive.openBox<UserModel>(AppKeys.userBoxName);
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint('⚠️ Erreur migration box users: $e');
|
||||
// En cas d'erreur, ouvrir quand même la nouvelle box
|
||||
try {
|
||||
await Hive.openBox<UserModel>(AppKeys.userBoxName);
|
||||
} catch (e2) {
|
||||
debugPrint('❌ Impossible d\'ouvrir la box user: $e2');
|
||||
}
|
||||
}
|
||||
|
||||
// Ouvrir les autres boîtes
|
||||
for (final box in boxesToOpen) {
|
||||
try {
|
||||
final boxName = box['name'] as String;
|
||||
final boxType = box['type'] as String;
|
||||
|
||||
// Skip userBoxName car déjà traité dans la migration
|
||||
if (boxName == AppKeys.userBoxName) continue;
|
||||
|
||||
// Vérifier si la boîte est déjà ouverte
|
||||
if (Hive.isBoxOpen(boxName)) {
|
||||
debugPrint('📦 Boîte $boxName déjà ouverte');
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (boxType) {
|
||||
case 'AmicaleModel':
|
||||
await Hive.openBox<AmicaleModel>(boxName);
|
||||
break;
|
||||
case 'ClientModel':
|
||||
await Hive.openBox<ClientModel>(boxName);
|
||||
break;
|
||||
case 'ConversationModel':
|
||||
await Hive.openBox<ConversationModel>(boxName);
|
||||
break;
|
||||
case 'MessageModel':
|
||||
await Hive.openBox<MessageModel>(boxName);
|
||||
break;
|
||||
default:
|
||||
await Hive.openBox(boxName);
|
||||
}
|
||||
|
||||
debugPrint('✅ Boîte $boxName ouverte avec succès');
|
||||
} catch (e) {
|
||||
debugPrint('❌ Erreur lors de l\'ouverture de la boîte ${box['name']}: $e');
|
||||
// Ne pas lancer d'erreur, continuer avec les autres boîtes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Vérifie si une box Hive existe sur le disque
|
||||
Future<bool> _doesBoxExist(String boxName) async {
|
||||
try {
|
||||
// Tentative d'ouverture pour vérifier l'existence
|
||||
final box = await Hive.openBox<UserModel>(boxName);
|
||||
final exists = box.isNotEmpty;
|
||||
await box.close();
|
||||
return exists;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
final boxesToOpen = [
|
||||
{'name': AppKeys.userBoxName, 'type': 'UserModel'},
|
||||
{'name': AppKeys.amicaleBoxName, 'type': 'AmicaleModel'},
|
||||
{'name': AppKeys.clientsBoxName, 'type': 'ClientModel'},
|
||||
{'name': AppKeys.settingsBoxName, 'type': 'dynamic'},
|
||||
|
||||
Reference in New Issue
Block a user