class Vote { final String id; final String ideaId; final String userId; final bool isUpvote; final DateTime createdAt; Vote({ required this.id, required this.ideaId, required this.userId, required this.isUpvote, required this.createdAt, }); factory Vote.fromJson(Map json) => Vote( id: json['id'] as String, ideaId: json['idea_id'] as String, userId: json['user_id'] as String, isUpvote: json['is_upvote'] as bool, createdAt: DateTime.parse(json['created_at'] as String), ); } class Comment { final String id; final String ideaId; final String userId; final String userName; final String body; final String? parentId; final List replies; final DateTime createdAt; final DateTime updatedAt; Comment({ required this.id, required this.ideaId, required this.userId, this.userName = '', required this.body, this.parentId, this.replies = const [], required this.createdAt, required this.updatedAt, }); factory Comment.fromJson(Map json) => Comment( id: json['id'] as String, ideaId: json['idea_id'] as String, userId: json['user_id'] as String, userName: json['user_name'] as String? ?? '', body: json['body'] as String, parentId: json['parent_id'] as String?, replies: (json['replies'] as List? ?? []) .map((e) => Comment.fromJson(e as Map)) .toList(), createdAt: DateTime.parse(json['created_at'] as String), updatedAt: DateTime.parse(json['updated_at'] as String), ); } class CreateCommentRequest { final String body; final String? parentId; CreateCommentRequest({required this.body, this.parentId}); Map toJson() => { 'body': body, if (parentId != null) 'parent_id': parentId, }; } class Activity { final String id; final String ideaId; final String userId; final String userName; final String action; final String? description; final DateTime createdAt; Activity({ required this.id, required this.ideaId, required this.userId, this.userName = '', required this.action, this.description, required this.createdAt, }); factory Activity.fromJson(Map json) => Activity( id: json['id'] as String, ideaId: json['idea_id'] as String, userId: json['user_id'] as String, userName: json['user_name'] as String? ?? '', action: json['action'] as String, description: json['description'] as String?, createdAt: DateTime.parse(json['created_at'] as String), ); } class AppNotification { final String id; final String userId; final String title; final String body; final bool isRead; final String? ideaId; final DateTime createdAt; AppNotification({ required this.id, required this.userId, required this.title, required this.body, this.isRead = false, this.ideaId, required this.createdAt, }); factory AppNotification.fromJson(Map json) => AppNotification( id: json['id'] as String, userId: json['user_id'] as String, title: json['title'] as String, body: json['body'] as String? ?? '', isRead: json['is_read'] as bool? ?? false, ideaId: json['idea_id'] as String?, createdAt: DateTime.parse(json['created_at'] as String), ); }