11import 'package:equatable/equatable.dart' ;
22
33import '../../../domain/entities/activity.dart' ;
4+ import '../../../domain/entities/activity_comment.dart' ;
45import '../../../domain/entities/enum/activity_type.dart' ;
56import '../../../domain/entities/location.dart' ;
67import '../../../domain/entities/user.dart' ;
8+ import 'activity_comment_response.dart' ;
79import 'location_response.dart' ;
810import 'user_response.dart' ;
911
@@ -42,6 +44,9 @@ class ActivityResponse extends Equatable {
4244 /// has current user liked ?
4345 final bool hasCurrentUserLiked;
4446
47+ /// The list of comments
48+ final Iterable <ActivityCommentResponse > comments;
49+
4550 /// Constructs an ActivityResponse object with the given parameters.
4651 const ActivityResponse (
4752 {required this .id,
@@ -54,7 +59,8 @@ class ActivityResponse extends Equatable {
5459 required this .locations,
5560 required this .user,
5661 required this .likesCount,
57- required this .hasCurrentUserLiked});
62+ required this .hasCurrentUserLiked,
63+ required this .comments});
5864
5965 @override
6066 List <Object ?> get props => [
@@ -68,7 +74,8 @@ class ActivityResponse extends Equatable {
6874 ...locations,
6975 user,
7076 likesCount,
71- hasCurrentUserLiked
77+ hasCurrentUserLiked,
78+ ...comments
7279 ];
7380
7481 /// Creates an ActivityResponse object from a JSON map.
@@ -80,23 +87,28 @@ class ActivityResponse extends Equatable {
8087 );
8188
8289 return ActivityResponse (
83- id: map['id' ].toString (),
84- type: activityType,
85- startDatetime: DateTime .parse (map['startDatetime' ]),
86- endDatetime: DateTime .parse (map['endDatetime' ]),
87- distance: map['distance' ].toDouble (),
88- speed: map['speed' ] is String
89- ? double .parse (map['speed' ])
90- : map['speed' ].toDouble (),
91- time: map['time' ].toDouble (),
92- likesCount: map['likesCount' ].toDouble (),
93- hasCurrentUserLiked: map['hasCurrentUserLiked' ],
94- locations: (map['locations' ] as List <dynamic >)
95- .map <LocationResponse >((item) => LocationResponse .fromMap (item))
96- .toList (),
97- user: UserResponse .fromMap (
98- map['user' ],
99- ));
90+ id: map['id' ].toString (),
91+ type: activityType,
92+ startDatetime: DateTime .parse (map['startDatetime' ]),
93+ endDatetime: DateTime .parse (map['endDatetime' ]),
94+ distance: map['distance' ].toDouble (),
95+ speed: map['speed' ] is String
96+ ? double .parse (map['speed' ])
97+ : map['speed' ].toDouble (),
98+ time: map['time' ].toDouble (),
99+ likesCount: map['likesCount' ].toDouble (),
100+ hasCurrentUserLiked: map['hasCurrentUserLiked' ],
101+ locations: (map['locations' ] as List <dynamic >)
102+ .map <LocationResponse >((item) => LocationResponse .fromMap (item))
103+ .toList (),
104+ user: UserResponse .fromMap (
105+ map['user' ],
106+ ),
107+ comments: (map['comments' ] as List <dynamic >)
108+ .map <ActivityCommentResponse >(
109+ (item) => ActivityCommentResponse .fromMap (item))
110+ .toList (),
111+ );
100112 }
101113
102114 /// Converts the ActivityResponse object to an Activity entity.
@@ -111,22 +123,32 @@ class ActivityResponse extends Equatable {
111123 }).toList ()
112124 ..sort ((a, b) => a.datetime.compareTo (b.datetime));
113125
126+ final activityComments = comments.map <ActivityComment >((comment) {
127+ return ActivityComment (
128+ id: comment.id,
129+ createdAt: comment.createdAt,
130+ user: comment.user.toEntity (),
131+ content: comment.content,
132+ );
133+ }).toList ()
134+ ..sort ((a, b) => a.createdAt.compareTo (b.createdAt));
135+
114136 return Activity (
115- id: id,
116- type: type,
117- startDatetime: startDatetime,
118- endDatetime: endDatetime,
119- distance: distance,
120- speed: speed,
121- time: time,
122- locations: activityLocations,
123- likesCount: likesCount,
124- hasCurrentUserLiked: hasCurrentUserLiked,
125- user: User (
126- id: user.id,
127- username: user.username,
128- firstname: user.firstname,
129- lastname: user.lastname),
130- );
137+ id: id,
138+ type: type,
139+ startDatetime: startDatetime,
140+ endDatetime: endDatetime,
141+ distance: distance,
142+ speed: speed,
143+ time: time,
144+ locations: activityLocations,
145+ likesCount: likesCount,
146+ hasCurrentUserLiked: hasCurrentUserLiked,
147+ user: User (
148+ id: user.id,
149+ username: user.username,
150+ firstname: user.firstname,
151+ lastname: user.lastname),
152+ comments : activityComments );
131153 }
132154}
0 commit comments