78 lines
1.9 KiB
Dart
78 lines
1.9 KiB
Dart
import 'profile.dart';
|
|
|
|
/// Comment status enum
|
|
enum CommentStatus {
|
|
active('active'),
|
|
flagged('flagged'),
|
|
removed('removed');
|
|
|
|
final String value;
|
|
const CommentStatus(this.value);
|
|
|
|
static CommentStatus fromString(String value) {
|
|
return CommentStatus.values.firstWhere(
|
|
(status) => status.value == value,
|
|
orElse: () => CommentStatus.active,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Comment model matching backend comments table
|
|
class Comment {
|
|
final String id;
|
|
final String postId;
|
|
final String authorId;
|
|
final String body;
|
|
final CommentStatus status;
|
|
final DateTime createdAt;
|
|
final DateTime? updatedAt;
|
|
|
|
// Relations
|
|
final Profile? author;
|
|
final int? voteCount;
|
|
|
|
Comment({
|
|
required this.id,
|
|
required this.postId,
|
|
required this.authorId,
|
|
required this.body,
|
|
required this.status,
|
|
required this.createdAt,
|
|
this.updatedAt,
|
|
this.author,
|
|
this.voteCount,
|
|
});
|
|
|
|
factory Comment.fromJson(Map<String, dynamic> json) {
|
|
return Comment(
|
|
id: json['id'] as String,
|
|
postId: json['post_id'] as String,
|
|
authorId: json['author_id'] as String,
|
|
body: json['body'] as String,
|
|
status: CommentStatus.fromString(json['status'] as String),
|
|
createdAt: DateTime.parse(json['created_at'] as String),
|
|
updatedAt: json['updated_at'] != null
|
|
? DateTime.parse(json['updated_at'] as String)
|
|
: null,
|
|
author: json['author'] != null
|
|
? Profile.fromJson(json['author'] as Map<String, dynamic>)
|
|
: null,
|
|
voteCount: json['vote_count'] as int?,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'post_id': postId,
|
|
'author_id': authorId,
|
|
'body': body,
|
|
'status': status.value,
|
|
'created_at': createdAt.toIso8601String(),
|
|
'updated_at': updatedAt?.toIso8601String(),
|
|
'author': author?.toJson(),
|
|
'vote_count': voteCount,
|
|
};
|
|
}
|
|
}
|