Files
EM2_ERP/em2rp/lib/repositories/user_repository.dart
T

100 lines
3.2 KiB
Dart

import 'package:em2rp/services/api_service.dart';
/// Repository pour gérer toutes les opérations sur les utilisateurs et les rôles.
class UserRepository {
final ApiService _apiService;
UserRepository(this._apiService);
/// Récupère l'utilisateur actuellement authentifié avec son rôle
Future<Map<String, dynamic>> getCurrentUser() async {
try {
print('[UserRepository] Calling getCurrentUser API...');
final result = await _apiService.call('getCurrentUser', {});
print('[UserRepository] Current user loaded successfully');
return result['user'] as Map<String, dynamic>;
} catch (e) {
print('[UserRepository] Error getting current user: $e');
throw Exception(
'Erreur lors de la récupération de l\'utilisateur actuel: $e');
}
}
/// Récupère tous les utilisateurs (selon permissions)
Future<List<Map<String, dynamic>>> getUsers() async {
try {
final result = await _apiService.call('getUsers', {});
final users = result['users'] as List<dynamic>?;
if (users == null) return [];
return users.map((e) => e as Map<String, dynamic>).toList();
} catch (e) {
throw Exception('Erreur lors de la récupération des utilisateurs: $e');
}
}
/// Récupère un utilisateur spécifique
Future<Map<String, dynamic>> getUser(String userId) async {
try {
final result = await _apiService.call('getUser', {'userId': userId});
return result['user'] as Map<String, dynamic>;
} catch (e) {
throw Exception('Erreur lors de la récupération de l\'utilisateur: $e');
}
}
/// Supprime un utilisateur (Auth + Firestore)
Future<void> deleteUser(String userId) async {
try {
await _apiService.call('deleteUser', {'userId': userId});
} catch (e) {
throw Exception('Erreur lors de la suppression de l\'utilisateur: $e');
}
}
/// Met à jour un utilisateur
Future<void> updateUser(String userId, Map<String, dynamic> data) async {
try {
await _apiService.call('updateUser', {
'userId': userId,
'data': data,
});
} catch (e) {
throw Exception('Erreur lors de la mise à jour de l\'utilisateur: $e');
}
}
/// Crée un utilisateur avec invitation par email
Future<Map<String, dynamic>> createUserWithInvite({
required String email,
required String firstName,
required String lastName,
String? phoneNumber,
required String roleId,
}) async {
try {
final result = await _apiService.call('createUserWithInvite', {
'email': email,
'firstName': firstName,
'lastName': lastName,
'phoneNumber': phoneNumber ?? '',
'roleId': roleId,
});
return result;
} catch (e) {
throw Exception('Erreur lors de la création de l\'utilisateur: $e');
}
}
/// Récupère tous les rôles
Future<List<Map<String, dynamic>>> getRoles() async {
try {
final result = await _apiService.call('getRoles', {});
final roles = result['roles'] as List<dynamic>?;
if (roles == null) return [];
return roles.map((e) => e as Map<String, dynamic>).toList();
} catch (e) {
throw Exception('Erreur lors de la récupération des rôles: $e');
}
}
}