diff --git a/lib/models/radar_overview/category.dart b/lib/models/category.dart similarity index 100% rename from lib/models/radar_overview/category.dart rename to lib/models/category.dart diff --git a/lib/models/comment/comment.dart b/lib/models/comment/comment.dart new file mode 100644 index 0000000..51cdaf7 --- /dev/null +++ b/lib/models/comment/comment.dart @@ -0,0 +1,51 @@ +import 'feedback.dart'; +import 'reply.dart'; +import 'user.dart'; + +class Comment { + final int id; + final String text; + final String createdAt; + final bool liked; + final bool disliked; + final Feedback feedback; + final User user; + final List replies; + + Comment({ + required this.id, + required this.text, + required this.createdAt, + required this.liked, + required this.disliked, + required this.feedback, + required this.user, + required this.replies, + }); + + factory Comment.fromJson(Map json) => Comment( + id: json['id'], + text: json['text'], + createdAt: json['createdAt'], + liked: json['liked'], + disliked: json['disliked'], + feedback: Feedback.fromJson(json['feedback']), + user: User.fromJson(json['user']), + replies: List.from( + json['replies'].map( + (reply) => Reply.fromJson(reply), + ), + ), + ); + + Map toJson() => { + 'id': id, + 'text': text, + 'createdAt': createdAt, + 'liked': liked, + 'disliked': disliked, + 'feedback': feedback.toJson(), + 'user': user.toJson(), + 'replies': replies.map((e) => e.toJson()).toList(), + }; +} diff --git a/lib/models/comment/feedback.dart b/lib/models/comment/feedback.dart new file mode 100644 index 0000000..57e756b --- /dev/null +++ b/lib/models/comment/feedback.dart @@ -0,0 +1,16 @@ +class Feedback { + final int like; + final int dislike; + + const Feedback({required this.like, required this.dislike}); + + factory Feedback.fromJson(Map json) => Feedback( + like: json['like'], + dislike: json['dislike'], + ); + + Map toJson() => { + 'like': like, + 'dislike': dislike, + }; +} diff --git a/lib/models/comment/reply.dart b/lib/models/comment/reply.dart new file mode 100644 index 0000000..3ba0185 --- /dev/null +++ b/lib/models/comment/reply.dart @@ -0,0 +1,42 @@ +import 'feedback.dart'; +import 'user.dart'; + +class Reply { + final int id; + final String text; + final String createdAt; + final bool liked; + final bool disliked; + final Feedback feedback; + final User user; + + const Reply({ + required this.id, + required this.text, + required this.createdAt, + required this.liked, + required this.disliked, + required this.feedback, + required this.user, + }); + + factory Reply.fromJson(Map json) => Reply( + id: json['id'], + text: json['text'], + createdAt: json['createdAt'], + liked: json['liked'], + disliked: json['disliked'], + feedback: Feedback.fromJson(json['feedback']), + user: User.fromJson(json['user']), + ); + + Map toJson() => { + 'id': id, + 'text': text, + 'createdAt': createdAt, + 'liked': liked, + 'disliked': disliked, + 'feedback': feedback.toJson(), + 'user': user.toJson(), + }; +} diff --git a/lib/models/comment/user.dart b/lib/models/comment/user.dart new file mode 100644 index 0000000..10ebbf3 --- /dev/null +++ b/lib/models/comment/user.dart @@ -0,0 +1,19 @@ +class User { + final int id; + final String fullName; + final String? photo; + + const User({required this.id, required this.fullName, required this.photo}); + + factory User.fromJson(Map json) => User( + id: json['id'], + fullName: json['fullName'], + photo: json['photo'], + ); + + Map toJson() => { + 'id': id, + 'fullName': fullName, + 'photo': photo, + }; +} diff --git a/lib/models/news_overview.dart b/lib/models/news_overview.dart new file mode 100644 index 0000000..fe1c60d --- /dev/null +++ b/lib/models/news_overview.dart @@ -0,0 +1,39 @@ +class NewsOverview { + final int id; + final String title; + final String reference; + final String description; + final String image; + final String createdAt; + final bool marked; + + const NewsOverview({ + required this.id, + required this.title, + required this.reference, + required this.description, + required this.image, + required this.createdAt, + required this.marked, + }); + + factory NewsOverview.fromJson(Map json) => NewsOverview( + id: json['id'], + title: json['title'], + reference: json['reference'], + description: json['description'], + image: json['image'], + createdAt: json['createdAt'], + marked: json['marked'], + ); + + Map toJson() => { + 'id': id, + 'title': title, + 'reference': reference, + 'description': description, + 'image': image, + 'createdAt': createdAt, + 'marked': marked, + }; +} diff --git a/lib/models/radar_details_data/content.dart b/lib/models/radar_details_data/content.dart new file mode 100644 index 0000000..aa431e1 --- /dev/null +++ b/lib/models/radar_details_data/content.dart @@ -0,0 +1,31 @@ +class Content { + final int order; + final String? text; + final String? audio; + final String? video; + final String? image; + + const Content({ + required this.order, + required this.text, + required this.audio, + required this.video, + required this.image, + }); + + factory Content.fromJson(Map json) => Content( + order: json['order'], + text: json['text'], + audio: json['audio'], + video: json['video'], + image: json['image'], + ); + + Map toJson() => { + 'order': order, + 'text': text, + 'audio': audio, + 'video': video, + 'image': image, + }; +} diff --git a/lib/models/radar_details_data/radar_details_data.dart b/lib/models/radar_details_data/radar_details_data.dart new file mode 100644 index 0000000..763029b --- /dev/null +++ b/lib/models/radar_details_data/radar_details_data.dart @@ -0,0 +1,78 @@ +import 'package:didvan/models/category.dart'; + +import 'content.dart'; +import 'tag.dart'; + +class RadarDetailsData { + final int id; + final String title; + final String image; + final String description; + final int timeToRead; + final String createdAt; + final String? podcast; + final bool forManagers; + final bool marked; + final int comments; + final List tags; + final List contents; + final List categories; + + const RadarDetailsData({ + required this.id, + required this.title, + required this.image, + required this.description, + required this.timeToRead, + required this.createdAt, + required this.podcast, + required this.forManagers, + required this.marked, + required this.comments, + required this.tags, + required this.contents, + required this.categories, + }); + + factory RadarDetailsData.fromJson(Map json) { + return RadarDetailsData( + id: json['id'], + title: json['title'], + image: json['image'], + description: json['description'], + timeToRead: json['timeToRead'], + createdAt: json['createdAt'], + podcast: json['podcast'], + forManagers: json['forManagers'], + marked: json['marked'], + comments: json['comments'], + tags: List.from(json['tags'].map((tag) => Tag.fromJson(tag))), + contents: List.from( + json['contents'].map( + (content) => Content.fromJson(content), + ), + ), + categories: List.from( + json['categories'].map( + (cat) => Category.fromJson(cat), + ), + ), + ); + } + + Map toJson() => { + 'id': id, + 'title': title, + 'image': image, + 'description': description, + 'timeToRead': timeToRead, + 'createdAt': createdAt, + 'podcast': podcast, + 'forManagers': forManagers, + 'marked': marked, + 'comments': comments, + 'tags': tags.map((e) => e.toJson()).toList(), + 'contents': contents.map((e) => e.toJson()).toList(), + 'categories': categories.map((e) => e.toJson()).toList(), + }; +} diff --git a/lib/models/radar_details_data/tag.dart b/lib/models/radar_details_data/tag.dart new file mode 100644 index 0000000..34e690a --- /dev/null +++ b/lib/models/radar_details_data/tag.dart @@ -0,0 +1,16 @@ +class Tag { + final int id; + final String label; + + const Tag({required this.id, required this.label}); + + factory Tag.fromJson(Map json) => Tag( + id: json['id'], + label: json['label'], + ); + + Map toJson() => { + 'id': id, + 'label': label, + }; +} diff --git a/lib/models/radar_overview/radar_overview.dart b/lib/models/radar_overview/radar_overview.dart index 4b9aa81..2a45483 100644 --- a/lib/models/radar_overview/radar_overview.dart +++ b/lib/models/radar_overview/radar_overview.dart @@ -1,4 +1,4 @@ -import 'category.dart'; +import '../category.dart'; class RadarOverview { final int id; diff --git a/lib/models/user.dart b/lib/models/user.dart index a652cb8..6b5aec3 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -1,9 +1,12 @@ +import 'package:didvan/services/network/request_helper.dart'; + class User { final int id; final String phoneNumber; final String fullName; final String? username; final String? photo; + final String? email; const User({ required this.id, @@ -11,14 +14,17 @@ class User { required this.phoneNumber, required this.photo, required this.fullName, + required this.email, }); factory User.fromJson(Map json) => User( - id: json['id'], - username: json['username'], - phoneNumber: json['phoneNumber'], - photo: json['photo'], - fullName: json['fullName']); + id: json['id'], + username: json['username'], + phoneNumber: json['phoneNumber'], + photo: RequestHelper.baseUrl + json['photo'], + fullName: json['fullName'], + email: json['email'], + ); Map toJson() => { 'id': id, @@ -26,6 +32,7 @@ class User { 'phoneNumber': phoneNumber, 'photo': photo, 'fullName': fullName, + 'email': email, }; User copyWith({ @@ -34,6 +41,7 @@ class User { String? phoneNumber, String? photo, String? fullName, + String? email, }) { return User( id: id ?? this.id, @@ -41,6 +49,7 @@ class User { phoneNumber: phoneNumber ?? this.phoneNumber, photo: photo ?? this.photo, fullName: fullName ?? this.fullName, + email: email ?? this.email, ); } } diff --git a/lib/models/radar_category.dart b/lib/models/view/radar_category.dart similarity index 100% rename from lib/models/radar_category.dart rename to lib/models/view/radar_category.dart