81 lines
1.9 KiB
Dart
81 lines
1.9 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
|
|
class User extends Equatable {
|
|
final String id;
|
|
final String username;
|
|
final String email;
|
|
final String? displayName;
|
|
final String? avatarUrl;
|
|
final DateTime createdAt;
|
|
final DateTime? lastLoginAt;
|
|
|
|
const User({
|
|
required this.id,
|
|
required this.username,
|
|
required this.email,
|
|
this.displayName,
|
|
this.avatarUrl,
|
|
required this.createdAt,
|
|
this.lastLoginAt,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
id,
|
|
username,
|
|
email,
|
|
displayName,
|
|
avatarUrl,
|
|
createdAt,
|
|
lastLoginAt,
|
|
];
|
|
|
|
User copyWith({
|
|
String? id,
|
|
String? username,
|
|
String? email,
|
|
String? displayName,
|
|
String? avatarUrl,
|
|
DateTime? createdAt,
|
|
DateTime? lastLoginAt,
|
|
}) {
|
|
return User(
|
|
id: id ?? this.id,
|
|
username: username ?? this.username,
|
|
email: email ?? this.email,
|
|
displayName: displayName ?? this.displayName,
|
|
avatarUrl: avatarUrl ?? this.avatarUrl,
|
|
createdAt: createdAt ?? this.createdAt,
|
|
lastLoginAt: lastLoginAt ?? this.lastLoginAt,
|
|
);
|
|
}
|
|
|
|
factory User.fromJson(Map<String, dynamic> json) {
|
|
return User(
|
|
id: json['id'] as String,
|
|
username: json['username'] as String,
|
|
email: json['email'] as String,
|
|
displayName: json['displayName'] as String?,
|
|
avatarUrl: json['avatarUrl'] as String?,
|
|
createdAt: DateTime.parse(
|
|
json['createdAt'] as String? ?? DateTime.now().toIso8601String(),
|
|
),
|
|
lastLoginAt: json['lastLoginAt'] != null
|
|
? DateTime.parse(json['lastLoginAt'] as String)
|
|
: null,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'username': username,
|
|
'email': email,
|
|
'displayName': displayName,
|
|
'avatarUrl': avatarUrl,
|
|
'createdAt': createdAt.toIso8601String(),
|
|
'lastLoginAt': lastLoginAt?.toIso8601String(),
|
|
};
|
|
}
|
|
}
|