Files
afterwork/lib/domain/entities/friend_request.dart
dahoud 06031b01f2 feat(frontend): Séparation des demandes d'amitié envoyées et reçues
- Ajout de deux endpoints distincts dans Urls: getSentFriendRequestsWithUserId et getReceivedFriendRequestsWithUserId
- Ajout de méthodes dans FriendsRepository et FriendsRepositoryImpl pour récupérer séparément les demandes envoyées et reçues
- Ajout de la méthode cancelFriendRequest pour annuler une demande envoyée
- Modification de FriendsProvider pour gérer deux listes distinctes: sentRequests et receivedRequests
- Mise à jour de FriendsScreen pour afficher deux sections:
  - Demandes reçues: avec boutons Accepter/Rejeter
  - Demandes envoyées: avec bouton Annuler uniquement
- Correction du mapping JSON dans FriendRequest.fromJson (userNom/userPrenoms correctement mappés)
- Amélioration de FriendRequestCard pour gérer les deux types de demandes
- Correction de la validation d'URL d'image dans FriendDetailScreen
- Support du champ uuid dans UserModel.fromJson pour compatibilité backend
2026-01-07 16:33:27 +00:00

84 lines
2.9 KiB
Dart

import 'package:equatable/equatable.dart';
/// Entité représentant une demande d'amitié.
/// Contient les informations nécessaires pour gérer les demandes d'amitié en attente.
class FriendRequest extends Equatable {
const FriendRequest({
required this.friendshipId,
required this.userId,
required this.userFirstName,
required this.userLastName,
required this.friendId,
required this.friendFirstName,
required this.friendLastName,
required this.status,
required this.createdAt,
});
/// ID de la relation d'amitié
final String friendshipId;
/// ID de l'utilisateur qui a envoyé la demande
final String userId;
/// Prénom de l'utilisateur qui a envoyé la demande
final String userFirstName;
/// Nom de l'utilisateur qui a envoyé la demande
final String userLastName;
/// ID de l'utilisateur qui a reçu la demande
final String friendId;
/// Prénom de l'utilisateur qui a reçu la demande
final String friendFirstName;
/// Nom de l'utilisateur qui a reçu la demande
final String friendLastName;
/// Statut de la demande (PENDING, ACCEPTED, REJECTED)
final String status;
/// Date de création de la demande
final String createdAt;
/// Nom complet de l'utilisateur qui a envoyé la demande
String get userFullName => '$userFirstName $userLastName'.trim();
/// Nom complet de l'utilisateur qui a reçu la demande
String get friendFullName => '$friendFirstName $friendLastName'.trim();
/// Factory constructor pour créer un [FriendRequest] à partir d'un JSON
factory FriendRequest.fromJson(Map<String, dynamic> json) {
// Le backend envoie : userNom (nom de famille), userPrenoms (prénoms)
// friendNom (nom de famille), friendPrenoms (prénoms)
return FriendRequest(
friendshipId: json['friendshipId']?.toString() ?? json['id']?.toString() ?? '',
userId: json['userId']?.toString() ?? '',
// userNom = nom de famille (lastName), userPrenoms = prénoms (firstName)
userFirstName: json['userPrenoms']?.toString() ?? json['userFirstName']?.toString() ?? '',
userLastName: json['userNom']?.toString() ?? json['userLastName']?.toString() ?? '',
friendId: json['friendId']?.toString() ?? '',
// friendNom = nom de famille (lastName), friendPrenoms = prénoms (firstName)
friendFirstName: json['friendPrenoms']?.toString() ?? json['friendFirstName']?.toString() ?? '',
friendLastName: json['friendNom']?.toString() ?? json['friendLastName']?.toString() ?? '',
status: json['status']?.toString() ?? 'PENDING',
createdAt: json['createdAt']?.toString() ?? json['created_at']?.toString() ?? '',
);
}
@override
List<Object?> get props => [
friendshipId,
userId,
userFirstName,
userLastName,
friendId,
friendFirstName,
friendLastName,
status,
createdAt,
];
}