108 lines
3.2 KiB
Dart
108 lines
3.2 KiB
Dart
|
import 'package:solian/models/account.dart';
|
||
|
import 'package:solian/models/feed.dart';
|
||
|
import 'package:solian/models/realm.dart';
|
||
|
|
||
|
class Article {
|
||
|
int id;
|
||
|
DateTime createdAt;
|
||
|
DateTime updatedAt;
|
||
|
DateTime? deletedAt;
|
||
|
String alias;
|
||
|
String title;
|
||
|
String description;
|
||
|
String content;
|
||
|
List<Tag>? tags;
|
||
|
List<Category>? categories;
|
||
|
List<int>? attachments;
|
||
|
int? realmId;
|
||
|
Realm? realm;
|
||
|
DateTime? publishedAt;
|
||
|
bool? isDraft;
|
||
|
int authorId;
|
||
|
Account author;
|
||
|
int reactionCount;
|
||
|
Map<String, int> reactionList;
|
||
|
|
||
|
Article({
|
||
|
required this.id,
|
||
|
required this.createdAt,
|
||
|
required this.updatedAt,
|
||
|
required this.deletedAt,
|
||
|
required this.alias,
|
||
|
required this.title,
|
||
|
required this.description,
|
||
|
required this.content,
|
||
|
required this.tags,
|
||
|
required this.categories,
|
||
|
required this.attachments,
|
||
|
required this.realmId,
|
||
|
required this.realm,
|
||
|
required this.publishedAt,
|
||
|
required this.isDraft,
|
||
|
required this.authorId,
|
||
|
required this.author,
|
||
|
required this.reactionCount,
|
||
|
required this.reactionList,
|
||
|
});
|
||
|
|
||
|
factory Article.fromJson(Map<String, dynamic> json) => Article(
|
||
|
id: json['id'],
|
||
|
createdAt: DateTime.parse(json['created_at']),
|
||
|
updatedAt: DateTime.parse(json['updated_at']),
|
||
|
deletedAt: json['deleted_at'] != null
|
||
|
? DateTime.parse(json['deleted_at'])
|
||
|
: null,
|
||
|
alias: json['alias'],
|
||
|
title: json['title'],
|
||
|
description: json['description'],
|
||
|
content: json['content'],
|
||
|
tags: json['tags']?.map((x) => Tag.fromJson(x)).toList().cast<Tag>(),
|
||
|
categories: json['categories']
|
||
|
?.map((x) => Category.fromJson(x))
|
||
|
.toList()
|
||
|
.cast<Category>(),
|
||
|
attachments: json['attachments'] != null
|
||
|
? List<int>.from(json['attachments'])
|
||
|
: null,
|
||
|
realmId: json['realm_id'],
|
||
|
realm: json['realm'] != null ? Realm.fromJson(json['realm']) : null,
|
||
|
publishedAt: json['published_at'] != null
|
||
|
? DateTime.parse(json['published_at'])
|
||
|
: null,
|
||
|
isDraft: json['is_draft'],
|
||
|
authorId: json['author_id'],
|
||
|
author: Account.fromJson(json['author']),
|
||
|
reactionCount: json['reaction_count'],
|
||
|
reactionList: json['reaction_list'] != null
|
||
|
? json['reaction_list']
|
||
|
.map((key, value) => MapEntry(
|
||
|
key,
|
||
|
int.tryParse(value.toString()) ??
|
||
|
(value is double ? value.toInt() : null)))
|
||
|
.cast<String, int>()
|
||
|
: {},
|
||
|
);
|
||
|
|
||
|
Map<String, dynamic> toJson() => {
|
||
|
'id': id,
|
||
|
'created_at': createdAt.toIso8601String(),
|
||
|
'updated_at': updatedAt.toIso8601String(),
|
||
|
'deleted_at': deletedAt,
|
||
|
'alias': alias,
|
||
|
'title': title,
|
||
|
'description': description,
|
||
|
'content': content,
|
||
|
'tags': tags,
|
||
|
'categories': categories,
|
||
|
'attachments': attachments,
|
||
|
'realm_id': realmId,
|
||
|
'realm': realm?.toJson(),
|
||
|
'published_at': publishedAt?.toIso8601String(),
|
||
|
'is_draft': isDraft,
|
||
|
'author_id': authorId,
|
||
|
'author': author.toJson(),
|
||
|
'reaction_count': reactionCount,
|
||
|
'reaction_list': reactionList,
|
||
|
};
|
||
|
}
|