64 lines
1.6 KiB
Dart
64 lines
1.6 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) {
|
|
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: json['content'] as String?,
|
|
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');
|
|
}
|
|
}
|