membre add

This commit is contained in:
d6soft
2025-06-11 09:27:25 +02:00
parent f3f1a9c5e8
commit 4244b961fd
40 changed files with 144003 additions and 143144 deletions

View File

@@ -99,13 +99,13 @@ class MembreRepository extends ChangeNotifier {
}
// Sauvegarder un membre
Future<void> saveMembre(MembreModel membre) async {
Future<void> saveMembreBox(MembreModel membre) async {
await _membreBox.put(membre.id, membre);
notifyListeners();
}
// Supprimer un membre
Future<void> deleteMembre(int id) async {
Future<void> deleteMembreBox(int id) async {
await _membreBox.delete(id);
notifyListeners();
}
@@ -113,48 +113,33 @@ class MembreRepository extends ChangeNotifier {
// === MÉTHODES API ===
// Créer un membre via l'API
Future<bool> createMembre(MembreModel membre) async {
Future<MembreModel?> createMembre(MembreModel membre) async {
_isLoading = true;
notifyListeners();
try {
// Préparer les données pour l'API - exclure l'id pour la création
final data = membre.toJson();
// Convertir en UserModel pour l'API
final userModel = membre.toUserModel();
final data = userModel.toJson();
data.remove('id'); // L'API génère l'ID
data.remove('created_at'); // L'API génère created_at
// Appeler l'API pour créer le membre
final response = await ApiService.instance.post('/membres', data: data);
// Appeler l'API users
final response = await ApiService.instance.post('/users', data: data);
if (response.statusCode == 201 || response.statusCode == 200) {
// Récupérer l'ID du nouveau membre
final membreId = response.data['id'] is String ? int.parse(response.data['id']) : response.data['id'] as int;
// Créer le membre avec les données retournées par l'API
final createdMember = MembreModel.fromJson(response.data);
// Créer le membre localement avec l'ID retourné par l'API
final newMembre = MembreModel(
id: membreId,
fkEntite: membre.fkEntite,
role: membre.role,
fkTitre: membre.fkTitre,
name: membre.name,
firstName: membre.firstName,
username: membre.username,
sectName: membre.sectName,
email: membre.email,
phone: membre.phone,
mobile: membre.mobile,
dateNaissance: membre.dateNaissance,
dateEmbauche: membre.dateEmbauche,
createdAt: DateTime.now(),
isActive: membre.isActive,
);
// Sauvegarder localement
await saveMembreBox(createdMember);
await saveMembre(newMembre);
return true;
return createdMember; // Retourner le membre créé
}
return false;
return null;
} catch (e) {
debugPrint('Erreur lors de la création du membre: $e');
return false;
rethrow; // Propager l'exception pour la gestion d'erreurs
} finally {
_isLoading = false;
notifyListeners();
@@ -167,15 +152,15 @@ class MembreRepository extends ChangeNotifier {
notifyListeners();
try {
// Préparer les données pour l'API
final data = membre.toJson();
// Convertir en UserModel pour l'API
final userModel = membre.toUserModel();
// Appeler l'API pour mettre à jour le membre
final response = await ApiService.instance.put('/membres/${membre.id}', data: data);
// Appeler l'API users au lieu de membres
final response = await ApiService.instance.put('/users/${membre.id}', data: userModel.toJson());
if (response.statusCode == 200) {
// Sauvegarder le membre mis à jour localement
await saveMembre(membre);
await saveMembreBox(membre);
return true;
}
@@ -190,17 +175,17 @@ class MembreRepository extends ChangeNotifier {
}
// Supprimer un membre via l'API
Future<bool> deleteMembreViaApi(int id) async {
Future<bool> deleteMembre(int id) async {
_isLoading = true;
notifyListeners();
try {
// Appeler l'API pour supprimer le membre
final response = await ApiService.instance.delete('/membres/$id');
// Appeler l'API users au lieu de membres (correction ici)
final response = await ApiService.instance.delete('/users/$id');
if (response.statusCode == 200 || response.statusCode == 204) {
// Supprimer le membre localement
await deleteMembre(id);
await deleteMembreBox(id);
return true;
}
@@ -259,12 +244,12 @@ class MembreRepository extends ChangeNotifier {
}
// Récupérer les membres depuis l'API
Future<List<MembreModel>> fetchMembresFromApi() async {
Future<List<MembreModel>> fetchMembres() async {
_isLoading = true;
notifyListeners();
try {
final response = await ApiService.instance.get('/membres');
final response = await ApiService.instance.get('/users');
if (response.statusCode == 200) {
final membresData = response.data;

View File

@@ -423,6 +423,49 @@ class UserRepository extends ChangeNotifier {
await _userBox.delete(id);
}
/// Mettre à jour un utilisateur (pour le profil personnel et la gestion des membres)
Future<UserModel> updateUser(UserModel updatedUser) async {
try {
debugPrint('🔄 Mise à jour utilisateur: ${updatedUser.email}');
// D'ABORD essayer de synchroniser avec l'API
try {
final hasConnection = await ApiService.instance.hasInternetConnection();
if (hasConnection) {
// Tentative de mise à jour sur l'API
await ApiService.instance.updateUser(updatedUser);
debugPrint('✅ Utilisateur mis à jour sur l\'API');
// Si succès API, sauvegarder localement avec sync = true
final syncedUser = updatedUser.copyWith(
isSynced: true,
lastSyncedAt: DateTime.now(),
);
await _userBox.put(syncedUser.id, syncedUser);
// Si c'est l'utilisateur connecté, mettre à jour le service
if (currentUser?.id == syncedUser.id) {
await CurrentUserService.instance.setUser(syncedUser);
}
notifyListeners();
return syncedUser;
} else {
debugPrint('⚠️ Pas de connexion internet');
throw Exception('Pas de connexion internet');
}
} catch (apiError) {
debugPrint('❌ Erreur API lors de la mise à jour: $apiError');
// Relancer l'erreur pour qu'elle soit gérée par l'appelant
rethrow;
}
} catch (e) {
debugPrint('❌ Erreur mise à jour utilisateur: $e');
rethrow;
}
}
// === MÉTHODES UTILITAIRES POUR LES DONNÉES ===
/// Récupérer la dernière opération active