enum NotificationType { public, joinRequest } extension NotificationTypeExtension on NotificationType { String get label { switch (this) { case NotificationType.public: return 'عمومی'; case NotificationType.joinRequest: return 'درخواست عضویت'; } } String get apiValue { switch (this) { case NotificationType.public: return 'public'; case NotificationType.joinRequest: return 'join_request'; } } static NotificationType fromApi(String value) { switch (value) { case 'public': return NotificationType.public; case 'join_request': return NotificationType.joinRequest; default: return NotificationType.public; } } } class NotificationModel { final String id; final String title; final String? description; final NotificationType type; final bool? isAccepted; final String receiverId; final String? senderId; final String? groupId; const NotificationModel({ required this.id, required this.title, this.description, required this.type, this.isAccepted, required this.receiverId, this.senderId, this.groupId, }); factory NotificationModel.fromJson(Map json) { return NotificationModel( id: json['id'].toString(), title: json['title'] as String, description: json['description'] as String?, type: NotificationTypeExtension.fromApi(json['type'] as String), isAccepted: json['is_accepted'] as bool?, receiverId: json['receiver_id'].toString(), senderId: json['sender_id']?.toString(), groupId: json['group_id']?.toString(), ); } Map toJson() => { 'id': id, 'title': title, 'description': description, 'type': type.apiValue, 'is_accepted': isAccepted, 'receiver_id': receiverId, 'sender_id': senderId, 'group_id': groupId, }; }