feat: add Parent managment with admin dashbord

This commit is contained in:
Hanim
2025-09-15 13:28:20 +02:00
parent 61554c5edc
commit 050087359c
3 changed files with 470 additions and 82 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
// import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:shared_preferences/shared_preferences.dart';
class TokenService {
static const _storage = FlutterSecureStorage();
// static const _storage = FlutterSecureStorage();
static const _tokenKey = 'access_token';
static const String _refreshTokenKey = 'refresh_token';
static const _roleKey = 'user_role';
+105
View File
@@ -0,0 +1,105 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:p_tits_pas/services/api/api_config.dart';
import 'package:p_tits_pas/services/api/tokenService.dart';
import 'package:http/http.dart' as http;
class UserService {
final String baseUrl = ApiConfig.baseUrl;
//Recuperer tous les utilisateurs
Future<List<Map<String, dynamic>>> getAllUsers() async {
try {
final token = await TokenService.getToken();
if (token == null) {
throw Exception('Token non disponible');
}
final response = await http.get(
Uri.parse('$baseUrl${ApiConfig.users}'),
headers: ApiConfig.authHeaders(token),
);
if (response.statusCode == 200) {
final List<dynamic> data = jsonDecode(response.body);
return data.cast<Map<String, dynamic>>();
} else {
throw Exception('Erreur lors de la récupération des utilisateurs: ${response.statusCode}');
}
} catch (e) {
throw Exception('Erreur de connexion: $e');
}
}
//Récuperer les utilisateurs en fonction du role
Future<List<Map<String, dynamic>>> getUsersByRole(String role) async {
try {
final allUsers = await getAllUsers();
return allUsers.where((user) =>
user['role']?.toString().toLowerCase() == role.toLowerCase()
).toList();
} catch (e) {
throw Exception('Erreur lors de la récupération des utilisateurs par rôle: $e');
}
}
// Filtrer les utilisateurs par statut
Future<List<Map<String, dynamic>>> filterUsersByStatus(String? status) async {
try {
final allUsers = await getAllUsers();
if (status == null || status.isEmpty) return allUsers;
return allUsers
.where((user) =>
user['status']?.toString().toLowerCase() == status.toLowerCase())
.toList();
} catch (e) {
throw Exception('Erreur lors du filtrage: $e');
}
}
/// Supprimer un utilisateur
Future<bool> deleteUser(String userId) async {
try {
final token = await TokenService.getToken();
if (token == null) {
throw Exception('Token non disponible');
}
final response = await http.delete(
Uri.parse('$baseUrl${ApiConfig.users}/$userId'),
headers: ApiConfig.authHeaders(token),
);
return response.statusCode == 200 || response.statusCode == 204;
} catch (e) {
throw Exception('Erreur lors de la suppression: $e');
}
}
/// Récupérer les détails d'un utilisateur
Future<Map<String, dynamic>?> getUserById(String userId) async {
try {
final token = await TokenService.getToken();
if (token == null) {
throw Exception('Token non disponible');
}
final response = await http.get(
Uri.parse('$baseUrl${ApiConfig.users}/$userId'),
headers: ApiConfig.authHeaders(token),
);
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
return null;
}
} catch (e) {
throw Exception('Erreur lors de la récupération de l\'utilisateur: $e');
}
}
}