enum FriendRequestStatus { pending, accepted, rejected } class FriendUser { final String id; final String username; final String? avatarUrl; const FriendUser({ required this.id, required this.username, required this.avatarUrl, }); factory FriendUser.fromJson(Map json) { return FriendUser( id: json['id'] as String, username: json['username'] as String, avatarUrl: json['avatar_url'] as String?, ); } } class FriendRequest { final String id; final FriendUser sender; final FriendUser recipient; final String? content; final FriendRequestStatus status; final DateTime createdAt; const FriendRequest({ required this.id, required this.sender, required this.recipient, required this.content, required this.status, required this.createdAt, }); factory FriendRequest.fromJson(Map json) { final rawContent = json['content'] as Map?; final content = rawContent?['message'] as String?; return FriendRequest( id: json['id'] as String, sender: FriendUser.fromJson(json['sender'] as Map), recipient: FriendUser.fromJson(json['recipient'] as Map), content: content, status: _friendRequestStatusFromApi(json['status'] as String), createdAt: DateTime.parse(json['created_at'] as String), ); } } FriendRequestStatus _friendRequestStatusFromApi(String raw) { switch (raw) { case 'pending': return FriendRequestStatus.pending; case 'accepted': return FriendRequestStatus.accepted; case 'rejected': return FriendRequestStatus.rejected; default: throw StateError('Unsupported friend request status: $raw'); } }