Files
social-app/apps/lib/features/contacts/data/models/friend_request.dart
T

66 lines
1.7 KiB
Dart

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<String, dynamic> 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<String, dynamic> json) {
final rawContent = json['content'] as Map<String, dynamic>?;
final content = rawContent?['message'] as String?;
return FriendRequest(
id: json['id'] as String,
sender: FriendUser.fromJson(json['sender'] as Map<String, dynamic>),
recipient: FriendUser.fromJson(json['recipient'] as Map<String, dynamic>),
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');
}
}