Perbarui model dan tampilan untuk mendukung perubahan struktur data pengguna. Ganti properti nama dan telepon dengan namaLengkap dan noHp di beberapa model, termasuk DonaturModel, PetugasDesaModel, dan WargaModel. Modifikasi tampilan dan controller untuk menggunakan properti baru ini. Tambahkan fungsionalitas baru untuk menampilkan nama lengkap dan nomor telepon dengan lebih baik di berbagai tampilan. Perbarui rute dan logika aplikasi untuk mencerminkan perubahan ini.
This commit is contained in:
@ -1,51 +1,58 @@
|
||||
import 'package:penyaluran_app/app/data/models/desa_model.dart';
|
||||
|
||||
class UserModel {
|
||||
// Model dasar untuk pengguna dengan informasi autentikasi umum
|
||||
class BaseUserModel {
|
||||
final String id;
|
||||
final String email;
|
||||
final String? name;
|
||||
final String? avatar;
|
||||
final String role;
|
||||
final int? roleId;
|
||||
final String roleName;
|
||||
final bool isActive;
|
||||
final DesaModel? desa;
|
||||
final String? desaId;
|
||||
final DateTime? lastLogin;
|
||||
final DateTime? createdAt;
|
||||
final DateTime? updatedAt;
|
||||
final String? name;
|
||||
final String? role;
|
||||
final DesaModel? desa;
|
||||
|
||||
UserModel({
|
||||
BaseUserModel({
|
||||
required this.id,
|
||||
required this.email,
|
||||
this.name,
|
||||
this.avatar,
|
||||
required this.role,
|
||||
this.roleId,
|
||||
required this.roleName,
|
||||
this.isActive = true,
|
||||
this.desa,
|
||||
this.desaId,
|
||||
this.lastLogin,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.name,
|
||||
this.role,
|
||||
this.desa,
|
||||
});
|
||||
|
||||
factory UserModel.fromJson(Map<String, dynamic> json) {
|
||||
factory BaseUserModel.fromJson(Map<String, dynamic> json) {
|
||||
// Pastikan id dan email tidak null
|
||||
if (json['id'] == null || json['email'] == null) {
|
||||
throw Exception('UserModel: id dan email tidak boleh null');
|
||||
throw Exception('BaseUserModel: id dan email tidak boleh null');
|
||||
}
|
||||
|
||||
// Parse desa jika ada
|
||||
DesaModel? desaModel;
|
||||
// Dapatkan roleName, default ke 'warga' jika tidak tersedia
|
||||
String roleName = 'warga';
|
||||
if (json['roles'] != null && json['roles']['role_name'] != null) {
|
||||
roleName = json['roles']['role_name'];
|
||||
} else if (json['role'] != null) {
|
||||
roleName = json['role'];
|
||||
}
|
||||
|
||||
// Parse desa data jika ada
|
||||
DesaModel? desa;
|
||||
if (json['desa'] != null && json['desa'] is Map<String, dynamic>) {
|
||||
desaModel = DesaModel.fromJson(json['desa'] as Map<String, dynamic>);
|
||||
desa = DesaModel.fromJson(json['desa']);
|
||||
}
|
||||
|
||||
return UserModel(
|
||||
return BaseUserModel(
|
||||
id: json['id'],
|
||||
email: json['email'],
|
||||
name: json['name'],
|
||||
avatar: json['avatar'],
|
||||
desa: desaModel,
|
||||
desaId: json['desa_id'],
|
||||
role: json['role'] ?? 'WARGA',
|
||||
roleId: json['role_id'],
|
||||
roleName: roleName,
|
||||
isActive: json['is_active'] ?? true,
|
||||
lastLogin: json['last_login'] != null
|
||||
? DateTime.parse(json['last_login'])
|
||||
@ -56,6 +63,9 @@ class UserModel {
|
||||
updatedAt: json['updated_at'] != null
|
||||
? DateTime.parse(json['updated_at'])
|
||||
: null,
|
||||
name: json['name'],
|
||||
role: roleName,
|
||||
desa: desa,
|
||||
);
|
||||
}
|
||||
|
||||
@ -63,83 +73,25 @@ class UserModel {
|
||||
return {
|
||||
'id': id,
|
||||
'email': email,
|
||||
'name': name,
|
||||
'avatar': avatar,
|
||||
'desa_id': desaId,
|
||||
'desa': desa?.toJson(),
|
||||
'role': role,
|
||||
'role_id': roleId,
|
||||
'role': roleName,
|
||||
'is_active': isActive,
|
||||
'last_login': lastLogin?.toIso8601String(),
|
||||
'created_at': createdAt?.toIso8601String(),
|
||||
'updated_at': updatedAt?.toIso8601String(),
|
||||
};
|
||||
}
|
||||
|
||||
UserModel copyWith({
|
||||
String? id,
|
||||
String? email,
|
||||
String? name,
|
||||
String? avatar,
|
||||
DesaModel? desa,
|
||||
String? desaId,
|
||||
String? role,
|
||||
bool? isActive,
|
||||
DateTime? lastLogin,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
}) {
|
||||
return UserModel(
|
||||
id: id ?? this.id,
|
||||
email: email ?? this.email,
|
||||
name: name ?? this.name,
|
||||
avatar: avatar ?? this.avatar,
|
||||
desa: desa ?? this.desa,
|
||||
desaId: desaId ?? this.desaId,
|
||||
role: role ?? this.role,
|
||||
isActive: isActive ?? this.isActive,
|
||||
lastLogin: lastLogin ?? this.lastLogin,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
updatedAt: updatedAt ?? this.updatedAt,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class User {
|
||||
final String? id;
|
||||
final String? name;
|
||||
final String? email;
|
||||
final String? phone;
|
||||
final String? role;
|
||||
final String? token;
|
||||
|
||||
User({
|
||||
this.id,
|
||||
this.name,
|
||||
this.email,
|
||||
this.phone,
|
||||
this.role,
|
||||
this.token,
|
||||
});
|
||||
|
||||
factory User.fromJson(Map<String, dynamic> json) {
|
||||
return User(
|
||||
id: json['id'],
|
||||
name: json['name'],
|
||||
email: json['email'],
|
||||
phone: json['phone'],
|
||||
role: json['role'],
|
||||
token: json['token'],
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'email': email,
|
||||
'phone': phone,
|
||||
'role': role,
|
||||
'token': token,
|
||||
'desa': desa?.toJson(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Class untuk menampung data user lengkap (BaseUserModel + data spesifik role)
|
||||
class UserData<T> {
|
||||
final BaseUserModel baseUser;
|
||||
final T roleData;
|
||||
|
||||
UserData({
|
||||
required this.baseUser,
|
||||
required this.roleData,
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user