60 lines
1.3 KiB
Dart
60 lines
1.3 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
|
|
class UserModel {
|
|
final String id;
|
|
final String email;
|
|
final String name;
|
|
final String role;
|
|
final String? deviceId;
|
|
final DateTime? createdAt;
|
|
|
|
UserModel({
|
|
required this.id,
|
|
required this.email,
|
|
required this.name,
|
|
required this.role,
|
|
this.deviceId,
|
|
this.createdAt,
|
|
});
|
|
|
|
Map<String, dynamic> toFirestore() {
|
|
return {
|
|
'email': email,
|
|
'name': name,
|
|
'role': role,
|
|
if (deviceId != null) 'device_id': deviceId,
|
|
'created_at': createdAt ?? FieldValue.serverTimestamp(),
|
|
};
|
|
}
|
|
|
|
factory UserModel.fromFirestore(DocumentSnapshot doc) {
|
|
final data = doc.data() as Map<String, dynamic>;
|
|
return UserModel(
|
|
id: doc.id,
|
|
email: data['email'] ?? '',
|
|
name: data['name'] ?? '',
|
|
role: data['role'] ?? '',
|
|
deviceId: data['device_id'],
|
|
createdAt: (data['created_at'] as Timestamp?)?.toDate(),
|
|
);
|
|
}
|
|
|
|
UserModel copyWith({
|
|
String? id,
|
|
String? email,
|
|
String? name,
|
|
String? role,
|
|
String? deviceId,
|
|
DateTime? createdAt,
|
|
}) {
|
|
return UserModel(
|
|
id: id ?? this.id,
|
|
email: email ?? this.email,
|
|
name: name ?? this.name,
|
|
role: role ?? this.role,
|
|
deviceId: deviceId ?? this.deviceId,
|
|
createdAt: createdAt ?? this.createdAt,
|
|
);
|
|
}
|
|
}
|