import 'package:hive/hive.dart'; import 'package:equatable/equatable.dart'; part 'anonymous_user_model.g.dart'; /// Modèle d'utilisateur anonyme pour le système de chat /// /// Ce modèle représente un utilisateur anonyme (pour le cas Resalice) /// et permet de tracker sa conversion éventuelle en utilisateur authentifié @HiveType(typeId: 23) class AnonymousUserModel extends HiveObject with EquatableMixin { @HiveField(0) final String id; @HiveField(1) final String deviceId; @HiveField(2) final String? name; @HiveField(3) final String? email; @HiveField(4) final DateTime createdAt; @HiveField(5) final String? convertedToUserId; @HiveField(6) final Map? metadata; AnonymousUserModel({ required this.id, required this.deviceId, this.name, this.email, required this.createdAt, this.convertedToUserId, this.metadata, }); /// Crée une instance depuis le JSON factory AnonymousUserModel.fromJson(Map json) { return AnonymousUserModel( id: json['id'] as String, deviceId: json['device_id'] as String, name: json['name'] as String?, email: json['email'] as String?, createdAt: DateTime.parse(json['created_at'] as String), convertedToUserId: json['converted_to_user_id'] as String?, metadata: json['metadata'] as Map?, ); } /// Convertit l'instance en JSON Map toJson() { return { 'id': id, 'device_id': deviceId, 'name': name, 'email': email, 'created_at': createdAt.toIso8601String(), 'converted_to_user_id': convertedToUserId, 'metadata': metadata, }; } /// Crée une copie modifiée de l'instance AnonymousUserModel copyWith({ String? id, String? deviceId, String? name, String? email, DateTime? createdAt, String? convertedToUserId, Map? metadata, }) { return AnonymousUserModel( id: id ?? this.id, deviceId: deviceId ?? this.deviceId, name: name ?? this.name, email: email ?? this.email, createdAt: createdAt ?? this.createdAt, convertedToUserId: convertedToUserId ?? this.convertedToUserId, metadata: metadata ?? this.metadata, ); } /// Vérifie si l'utilisateur a été converti en utilisateur authentifié bool get isConverted => convertedToUserId != null; @override List get props => [ id, deviceId, name, email, createdAt, convertedToUserId, metadata, ]; }