Julien Martin cde676c4f9 feat: alignement master sur develop (squash)
- 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
2026-03-26 00:20:47 +01:00

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();
}