- Dossiers unifiés #119, pending-families enrichi, validation admin (wizards) - Front: modèles dossier_unifie / pending_family, NIR, auth - Migrations dossier_famille, scripts de test API - Résolution conflits: parents.*, docs tickets, auth_service, nir_utils Made-with: Cursor
108 lines
3.2 KiB
Dart
108 lines
3.2 KiB
Dart
class AppUser {
|
|
final String id;
|
|
final String email;
|
|
final String role;
|
|
final DateTime createdAt;
|
|
final DateTime updatedAt;
|
|
final bool changementMdpObligatoire;
|
|
final String? nom;
|
|
final String? prenom;
|
|
final String? statut;
|
|
final String? telephone;
|
|
final String? photoUrl;
|
|
final String? adresse;
|
|
final String? ville;
|
|
final String? codePostal;
|
|
final String? relaisId;
|
|
final String? relaisNom;
|
|
final String? numeroDossier;
|
|
|
|
AppUser({
|
|
required this.id,
|
|
required this.email,
|
|
required this.role,
|
|
required this.createdAt,
|
|
required this.updatedAt,
|
|
this.changementMdpObligatoire = false,
|
|
this.nom,
|
|
this.prenom,
|
|
this.statut,
|
|
this.telephone,
|
|
this.photoUrl,
|
|
this.adresse,
|
|
this.ville,
|
|
this.codePostal,
|
|
this.relaisId,
|
|
this.relaisNom,
|
|
this.numeroDossier,
|
|
});
|
|
|
|
static String _str(dynamic v) {
|
|
if (v == null) return '';
|
|
if (v is String) return v;
|
|
return v.toString();
|
|
}
|
|
|
|
static DateTime _date(dynamic v) {
|
|
if (v == null) return DateTime.now();
|
|
if (v is DateTime) return v;
|
|
try {
|
|
return DateTime.parse(v.toString());
|
|
} catch (_) {
|
|
return DateTime.now();
|
|
}
|
|
}
|
|
|
|
factory AppUser.fromJson(Map<String, dynamic> json) {
|
|
final relaisJson = json['relais'];
|
|
final relaisMap =
|
|
relaisJson is Map<String, dynamic> ? relaisJson : <String, dynamic>{};
|
|
|
|
return AppUser(
|
|
id: _str(json['id']),
|
|
email: _str(json['email']),
|
|
role: _str(json['role']),
|
|
createdAt: _date(json['cree_le'] ?? json['createdAt']),
|
|
updatedAt: _date(json['modifie_le'] ?? json['updatedAt']),
|
|
changementMdpObligatoire:
|
|
json['changement_mdp_obligatoire'] == true,
|
|
nom: json['nom'] is String ? json['nom'] as String : null,
|
|
prenom: json['prenom'] is String ? json['prenom'] as String : null,
|
|
statut: json['statut'] is String ? json['statut'] as String : null,
|
|
telephone: json['telephone'] is String ? json['telephone'] as String : null,
|
|
photoUrl: json['photo_url'] is String ? json['photo_url'] as String : null,
|
|
adresse: json['adresse'] is String ? json['adresse'] as String : null,
|
|
ville: json['ville'] is String ? json['ville'] as String : null,
|
|
codePostal: json['code_postal'] is String ? json['code_postal'] as String : null,
|
|
relaisId: (json['relaisId'] ?? json['relais_id'] ?? relaisMap['id'])
|
|
?.toString(),
|
|
relaisNom: relaisMap['nom']?.toString(),
|
|
numeroDossier: json['numero_dossier'] is String ? json['numero_dossier'] as String : null,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'email': email,
|
|
'role': role,
|
|
'createdAt': createdAt.toIso8601String(),
|
|
'updatedAt': updatedAt.toIso8601String(),
|
|
'changement_mdp_obligatoire': changementMdpObligatoire,
|
|
'nom': nom,
|
|
'prenom': prenom,
|
|
'statut': statut,
|
|
'telephone': telephone,
|
|
'photo_url': photoUrl,
|
|
'adresse': adresse,
|
|
'ville': ville,
|
|
'code_postal': codePostal,
|
|
'relais_id': relaisId,
|
|
'relais_nom': relaisNom,
|
|
'numero_dossier': numeroDossier,
|
|
};
|
|
}
|
|
|
|
String get fullName => '${prenom ?? ''} ${nom ?? ''}'.trim();
|
|
}
|