wesal/frontend/lib/models/post_models.dart

196 lines
4.8 KiB
Dart

class PostCreator {
final String id;
final String displayName;
final String? avatar;
PostCreator({required this.id, required this.displayName, this.avatar});
factory PostCreator.fromJson(Map<String, dynamic> json) {
return PostCreator(
id: json['id']?.toString() ?? '',
displayName: json['displayName'] ?? '',
avatar: json['avatar']?.toString(),
);
}
Map<String, dynamic> toJson() {
return {'id': id, 'displayName': displayName, 'avatar': avatar};
}
}
class Post {
final String id;
final String creatorId;
final PostCreator creator;
final String body;
final int likes;
final int comments;
final DateTime creationDate;
final bool liked;
final List<String>? images;
Post({
required this.id,
required this.creatorId,
required this.creator,
required this.body,
required this.likes,
required this.comments,
required this.creationDate,
this.liked = false,
this.images,
});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
id: json['id']?.toString() ?? '',
creatorId: json['creatorId']?.toString() ?? '',
creator: PostCreator.fromJson(json['creator'] ?? {}),
body: json['body'] ?? '',
likes: int.tryParse(json['likes']?.toString() ?? '0') ?? 0,
comments: int.tryParse(json['comments']?.toString() ?? '0') ?? 0,
creationDate: DateTime.parse(
json['creationDate'] ?? DateTime.now().toIso8601String(),
),
liked: json['liked'] == true,
images: json['images'] != null ? List<String>.from(json['images']) : null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'creatorId': creatorId,
'creator': creator.toJson(),
'body': body,
'likes': likes,
'comments': comments,
'creationDate': creationDate.toIso8601String(),
'liked': liked,
'images': images,
};
}
Post copyWith({
String? id,
String? creatorId,
PostCreator? creator,
String? body,
int? likes,
int? comments,
DateTime? creationDate,
bool? liked,
List<String>? images,
}) {
return Post(
id: id ?? this.id,
creatorId: creatorId ?? this.creatorId,
creator: creator ?? this.creator,
body: body ?? this.body,
likes: likes ?? this.likes,
comments: comments ?? this.comments,
creationDate: creationDate ?? this.creationDate,
liked: liked ?? this.liked,
images: images ?? this.images,
);
}
}
class LikedUser {
final String id;
final String displayName;
final DateTime likeTime;
LikedUser({
required this.id,
required this.displayName,
required this.likeTime,
});
factory LikedUser.fromJson(Map<String, dynamic> json) {
return LikedUser(
id: json['id']?.toString() ?? '',
displayName: json['displayName'] ?? '',
likeTime: DateTime.parse(
json['likeTime'] ?? DateTime.now().toIso8601String(),
),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'displayName': displayName,
'likeTime': likeTime.toIso8601String(),
};
}
}
class DetailedPost {
final String id;
final PostCreator creator;
final String body;
final int likes;
final int comments;
final bool liked;
final DateTime creationDate;
final List<LikedUser> likedUsers;
final List<String>? images;
DetailedPost({
required this.id,
required this.creator,
required this.body,
required this.likes,
required this.comments,
required this.liked,
required this.creationDate,
required this.likedUsers,
this.images,
});
factory DetailedPost.fromJson(Map<String, dynamic> json) {
return DetailedPost(
id: json['id']?.toString() ?? '',
creator: PostCreator.fromJson(json['creator'] ?? {}),
body: json['body'] ?? '',
likes: int.tryParse(json['likes']?.toString() ?? '0') ?? 0,
comments: int.tryParse(json['comments']?.toString() ?? '0') ?? 0,
liked: json['liked'] == true,
creationDate: DateTime.parse(
json['creationDate'] ?? DateTime.now().toIso8601String(),
),
likedUsers:
(json['likedUsers'] as List?)
?.map((user) => LikedUser.fromJson(user))
.toList() ??
[],
images: json['images'] != null ? List<String>.from(json['images']) : null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'creator': creator.toJson(),
'body': body,
'likes': likes,
'comments': comments,
'liked': liked,
'creationDate': creationDate.toIso8601String(),
'likedUsers': likedUsers.map((user) => user.toJson()).toList(),
'images': images,
};
}
}
class CreatePostRequest {
final String body;
CreatePostRequest({required this.body});
Map<String, dynamic> toJson() {
return {'body': body};
}
}