feat: add Parent managment with admin dashbord
This commit is contained in:
@@ -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';
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user