Bon checkpoint + refactoring

This commit is contained in:
DahoudG
2024-11-02 22:37:47 +00:00
parent 9cf96b7acf
commit 19f6efa995
27 changed files with 684 additions and 499 deletions

View File

@@ -9,10 +9,11 @@ class CreatorModel extends UserModel {
}) : super(
userId: id,
nom: nom,
prenoms: prenoms,
userLastName: nom,
userFirstName: prenoms,
email: '', // Valeur par défaut vide
motDePasse: '', // Valeur par défaut vide
profileImageUrl: '',
);
factory CreatorModel.fromJson(Map<String, dynamic> json) {
@@ -27,8 +28,8 @@ class CreatorModel extends UserModel {
Map<String, dynamic> toJson() {
return {
'id': userId,
'nom': nom,
'prenoms': prenoms,
'nom': userLastName,
'prenoms': userFirstName,
};
}
}

View File

@@ -8,10 +8,11 @@ class ParticipantModel extends UserModel {
required String prenoms,
}) : super(
userId: id,
nom: nom,
prenoms: prenoms,
userLastName: nom,
userFirstName: prenoms,
email: '', // Valeur par défaut vide
motDePasse: '', // Valeur par défaut vide
profileImageUrl: '',
);
factory ParticipantModel.fromJson(Map<String, dynamic> json) {
@@ -27,8 +28,8 @@ class ParticipantModel extends UserModel {
Map<String, dynamic> toJson() {
return {
'id': userId,
'nom': nom,
'prenoms': prenoms,
'nom': userLastName,
'prenoms': userFirstName,
};
}
}

View File

@@ -5,26 +5,29 @@ import '../../domain/entities/user.dart';
class UserModel extends User {
UserModel({
required String userId,
required String nom,
required String prenoms,
required String userLastName,
required String userFirstName,
required String email,
required String motDePasse,
required String profileImageUrl,
}) : super(
userId: userId,
nom: nom,
prenoms: prenoms,
userLastName: userLastName,
userFirstName: userFirstName,
email: email,
motDePasse: motDePasse,
profileImageUrl: profileImageUrl,
);
/// Factory pour créer un `UserModel` à partir d'un JSON reçu depuis l'API.
factory UserModel.fromJson(Map<String, dynamic> json) {
return UserModel(
userId: json['userId'] ?? '',
nom: json['nom'] ?? 'Inconnu',
prenoms: json['prenoms'] ?? 'Inconnu',
userLastName: json['nom'] ?? 'Inconnu',
userFirstName: json['prenoms'] ?? 'Inconnu',
email: json['email'] ?? 'inconnu@example.com',
motDePasse: json['motDePasse'] ?? '',
profileImageUrl: json['profileImageUrl'] ?? '',
);
}
@@ -32,10 +35,11 @@ class UserModel extends User {
Map<String, dynamic> toJson() {
return {
'id': userId,
'nom': nom,
'prenoms': prenoms,
'nom': userLastName,
'prenoms': userFirstName,
'email': email,
'motDePasse': motDePasse, // Mot de passe en clair (comme demandé temporairement)
'profileImageUrl':profileImageUrl,
};
}
}

View File

@@ -1,37 +1,65 @@
import 'package:flutter/material.dart';
import '../../domain/entities/user.dart';
/// [UserProvider] est un `ChangeNotifier` qui gère les informations de l'utilisateur.
/// [UserProvider] est un `ChangeNotifier` qui gère les informations complètes de l'utilisateur.
/// Toutes les modifications et actions sont loguées pour assurer une traçabilité complète dans le terminal.
class UserProvider with ChangeNotifier {
String _userId = '';
String _userName = '';
String _userLastName = '';
User _user = const User(
userId: '',
userLastName: '',
userFirstName: '',
email: '',
motDePasse: '',
profileImageUrl: '',
eventsCount: 0,
friendsCount: 0,
postsCount: 0,
visitedPlacesCount: 0,
);
/// Getter pour l'ID de l'utilisateur
String get userId => _userId;
/// Getter pour le nom de l'utilisateur
String get userName => _userName;
/// Getter pour le prénom de l'utilisateur
String get userLastName => _userLastName;
/// Getter pour l'objet utilisateur.
User get user => _user;
/// Méthode pour définir les informations de l'utilisateur.
/// Logue les informations fournies et notifie les listeners des changements.
///
/// [id] : L'ID de l'utilisateur.
/// [name] : Le nom de l'utilisateur.
/// [lastName] : Le prénom de l'utilisateur.
void setUser(String id, String name, String lastName) {
debugPrint("[LOG] Tentative de définition des informations de l'utilisateur : ID = $id, Nom = $name, Prénom = $lastName");
/// [user] : L'objet utilisateur contenant toutes les informations.
void setUser(User user) {
debugPrint("[LOG] Tentative de définition des informations de l'utilisateur : ${user.toString()}");
_userId = id;
_userName = name;
_userLastName = lastName;
_user = user;
debugPrint("[LOG] Informations utilisateur définies : ID = $_userId, Nom = $_userName, Prénom = $_userLastName");
debugPrint("[LOG] Informations utilisateur définies : ${_user.toString()}");
// Notifie les widgets écoutant ce provider qu'une modification a eu lieu.
notifyListeners();
}
/// Méthode pour mettre à jour des statistiques de l'utilisateur.
/// Cette méthode met à jour individuellement des attributs spécifiques comme le nombre d'amis ou d'événements.
void updateStatistics({
int? eventsCount,
int? friendsCount,
int? postsCount,
int? visitedPlacesCount,
}) {
debugPrint("[LOG] Mise à jour des statistiques utilisateur");
_user = User(
userId: _user.userId,
userLastName: _user.userLastName,
userFirstName: _user.userFirstName,
email: _user.email,
motDePasse: _user.motDePasse,
profileImageUrl: _user.profileImageUrl,
eventsCount: eventsCount ?? _user.eventsCount,
friendsCount: friendsCount ?? _user.friendsCount,
postsCount: postsCount ?? _user.postsCount,
visitedPlacesCount: visitedPlacesCount ?? _user.visitedPlacesCount,
);
debugPrint("[LOG] Nouvelles statistiques utilisateur : ${_user.toString()}");
// Notifie les widgets écoutant ce provider qu'une modification a eu lieu
notifyListeners();
}
@@ -39,15 +67,23 @@ class UserProvider with ChangeNotifier {
/// Les valeurs sont loguées avant et après la réinitialisation.
void resetUser() {
debugPrint("[LOG] Réinitialisation des informations de l'utilisateur.");
debugPrint("[LOG] Valeurs avant réinitialisation : ID = $_userId, Nom = $_userName, Prénom = $_userLastName");
debugPrint("[LOG] Valeurs avant réinitialisation : ${_user.toString()}");
_userId = '';
_userName = '';
_userLastName = '';
_user = const User(
userId: '',
userLastName: '',
userFirstName: '',
email: '',
motDePasse: '',
profileImageUrl: '',
eventsCount: 0,
friendsCount: 0,
postsCount: 0,
visitedPlacesCount: 0,
);
debugPrint("[LOG] Informations utilisateur réinitialisées : ID = $_userId, Nom = $_userName, Prénom = $_userLastName");
debugPrint("[LOG] Informations utilisateur réinitialisées : ${_user.toString()}");
// Notifie les widgets écoutant ce provider que l'utilisateur a été réinitialisé
notifyListeners();
}
}

View File

@@ -60,15 +60,15 @@ class PreferencesHelper {
/// Sauvegarde le nom d'utilisateur dans les préférences.
/// Logue l'opération pour assurer un suivi complet.
Future<void> saveUserName(String userName) async {
print("[LOG] Sauvegarde du userName dans les préférences : $userName");
await setString('user_name', userName);
Future<void> saveUserName(String userFirstName) async {
print("[LOG] Sauvegarde du userFirstName dans les préférences : $userFirstName");
await setString('user_name', userFirstName);
}
/// Récupère le nom d'utilisateur depuis les préférences.
/// Retourne le nom ou null en cas d'échec.
Future<String?> getUserName() async {
print("[LOG] Récupération du userName depuis les préférences.");
Future<String?> getUseFirstrName() async {
print("[LOG] Récupération du userFirstName depuis les préférences.");
return await getString('user_name');
}
@@ -89,7 +89,7 @@ class PreferencesHelper {
/// Supprime toutes les informations utilisateur dans les préférences.
/// Logue chaque étape de la suppression.
Future<void> clearUserInfo() async {
print("[LOG] Suppression des informations utilisateur (userId, userName, userLastName) des préférences.");
print("[LOG] Suppression des informations utilisateur (userId, userFirstName, userLastName) des préférences.");
await remove('user_id');
await remove('user_name');
await remove('user_last_name');