75 lines
1.9 KiB
Dart
75 lines
1.9 KiB
Dart
import '../../domain/entities/user.dart';
|
|
|
|
/// User model for data layer (extends User entity)
|
|
class UserModel extends User {
|
|
const UserModel({
|
|
required super.id,
|
|
required super.name,
|
|
required super.email,
|
|
required super.roles,
|
|
required super.isActive,
|
|
required super.createdAt,
|
|
required super.updatedAt,
|
|
});
|
|
|
|
/// Create UserModel from JSON
|
|
factory UserModel.fromJson(Map<String, dynamic> json) {
|
|
// createdAt might not be in response, default to now
|
|
final createdAt = json['createdAt'] != null
|
|
? DateTime.parse(json['createdAt'] as String)
|
|
: DateTime.now();
|
|
|
|
return UserModel(
|
|
id: json['id'] as String,
|
|
name: json['name'] as String,
|
|
email: json['email'] as String,
|
|
roles: (json['roles'] as List<dynamic>).cast<String>(),
|
|
isActive: json['isActive'] as bool? ?? true,
|
|
createdAt: createdAt,
|
|
// updatedAt might not be in response, default to createdAt
|
|
updatedAt: json['updatedAt'] != null
|
|
? DateTime.parse(json['updatedAt'] as String)
|
|
: createdAt,
|
|
);
|
|
}
|
|
|
|
/// Convert UserModel to JSON
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'name': name,
|
|
'email': email,
|
|
'roles': roles,
|
|
'isActive': isActive,
|
|
'createdAt': createdAt.toIso8601String(),
|
|
'updatedAt': updatedAt.toIso8601String(),
|
|
};
|
|
}
|
|
|
|
/// Create UserModel from User entity
|
|
factory UserModel.fromEntity(User user) {
|
|
return UserModel(
|
|
id: user.id,
|
|
name: user.name,
|
|
email: user.email,
|
|
roles: user.roles,
|
|
isActive: user.isActive,
|
|
createdAt: user.createdAt,
|
|
updatedAt: user.updatedAt,
|
|
);
|
|
}
|
|
|
|
/// Convert to User entity
|
|
User toEntity() {
|
|
return User(
|
|
id: id,
|
|
name: name,
|
|
email: email,
|
|
roles: roles,
|
|
isActive: isActive,
|
|
createdAt: createdAt,
|
|
updatedAt: updatedAt,
|
|
);
|
|
}
|
|
}
|