Files
voidea/flutter/lib/models/idea.dart
T

121 lines
3.2 KiB
Dart

class Idea {
final String id;
final String title;
final String description;
final String? funnelStatus;
final String? workspaceId;
final String userId;
final String userName;
final int upvotes;
final int downvotes;
final int commentCount;
final DateTime createdAt;
final DateTime updatedAt;
Idea({
required this.id,
required this.title,
required this.description,
this.funnelStatus,
this.workspaceId,
required this.userId,
this.userName = '',
this.upvotes = 0,
this.downvotes = 0,
this.commentCount = 0,
required this.createdAt,
required this.updatedAt,
});
factory Idea.fromJson(Map<String, dynamic> json) => Idea(
id: json['id'] as String,
title: json['title'] as String,
description: json['description'] as String? ?? '',
funnelStatus: json['funnel_status'] as String?,
workspaceId: json['workspace_id'] as String?,
userId: json['user_id'] as String? ?? '',
userName: json['user_name'] as String? ?? '',
upvotes: json['upvotes'] as int? ?? 0,
downvotes: json['downvotes'] as int? ?? 0,
commentCount: json['comment_count'] as int? ?? 0,
createdAt: DateTime.parse(json['created_at'] as String),
updatedAt: DateTime.parse(json['updated_at'] as String),
);
Map<String, dynamic> toJson() => {
'id': id,
'title': title,
'description': description,
'funnel_status': funnelStatus,
'workspace_id': workspaceId,
'user_id': userId,
'user_name': userName,
'upvotes': upvotes,
'downvotes': downvotes,
'comment_count': commentCount,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
};
Idea copyWith({
String? title,
String? description,
String? funnelStatus,
int? upvotes,
int? downvotes,
int? commentCount,
}) =>
Idea(
id: id,
title: title ?? this.title,
description: description ?? this.description,
funnelStatus: funnelStatus ?? this.funnelStatus,
workspaceId: workspaceId,
userId: userId,
userName: userName,
upvotes: upvotes ?? this.upvotes,
downvotes: downvotes ?? this.downvotes,
commentCount: commentCount ?? this.commentCount,
createdAt: createdAt,
updatedAt: updatedAt,
);
}
class CreateIdeaRequest {
final String title;
final String description;
final String? workspaceId;
CreateIdeaRequest({
required this.title,
required this.description,
this.workspaceId,
});
Map<String, dynamic> toJson() => {
'title': title,
'description': description,
'workspace_id': workspaceId,
};
}
class UpdateIdeaRequest {
final String? title;
final String? description;
UpdateIdeaRequest({this.title, this.description});
Map<String, dynamic> toJson() => {
if (title != null) 'title': title,
if (description != null) 'description': description,
};
}
class FunnelTransitionRequest {
final String status;
FunnelTransitionRequest({required this.status});
Map<String, dynamic> toJson() => {'status': status};
}