import 'package:equatable/equatable.dart'; /// Entité de domaine représentant un commentaire sur un post social. /// /// Cette entité est pure et indépendante de la couche de données. /// Elle représente un commentaire dans le domaine métier. class Comment extends Equatable { const Comment({ required this.id, required this.postId, required this.userId, required this.userFirstName, required this.userLastName, required this.userProfileImageUrl, required this.content, required this.timestamp, }); /// ID unique du commentaire final String id; /// ID du post auquel appartient ce commentaire final String postId; /// ID de l'utilisateur qui a créé le commentaire final String userId; /// Prénom de l'utilisateur final String userFirstName; /// Nom de l'utilisateur final String userLastName; /// URL de l'image de profil de l'utilisateur final String userProfileImageUrl; /// Contenu du commentaire final String content; /// Date et heure de création du commentaire final DateTime timestamp; /// Retourne le nom complet de l'auteur du commentaire String get authorFullName => '$userFirstName $userLastName'; @override List get props => [ id, postId, userId, userFirstName, userLastName, userProfileImageUrl, content, timestamp, ]; /// Crée une copie de ce commentaire avec des valeurs modifiées. Comment copyWith({ String? id, String? postId, String? userId, String? userFirstName, String? userLastName, String? userProfileImageUrl, String? content, DateTime? timestamp, }) { return Comment( id: id ?? this.id, postId: postId ?? this.postId, userId: userId ?? this.userId, userFirstName: userFirstName ?? this.userFirstName, userLastName: userLastName ?? this.userLastName, userProfileImageUrl: userProfileImageUrl ?? this.userProfileImageUrl, content: content ?? this.content, timestamp: timestamp ?? this.timestamp, ); } }