class Tenant { final String id; final String name; final String slug; final String description; Tenant({ required this.id, required this.name, required this.slug, required this.description, }); factory Tenant.fromJson(Map json) { return Tenant( id: json['id'] ?? '', name: json['name'] ?? '', slug: json['slug'] ?? '', description: json['description'] ?? '', ); } Map toJson() { return {'id': id, 'name': name, 'slug': slug, 'description': description}; } } class UserProfile { final String id; final String email; final String name; final String phone; final String department; final String affiliationType; final String companyCode; final String? sessionAuthenticatedAt; final Map? metadata; final Tenant? tenant; UserProfile({ required this.id, required this.email, required this.name, required this.phone, required this.department, required this.affiliationType, required this.companyCode, this.sessionAuthenticatedAt, this.metadata, this.tenant, }); factory UserProfile.fromJson(Map json) { return UserProfile( id: json['id'] ?? '', email: json['email'] ?? '', name: json['name'] ?? '', phone: json['phone'] ?? '', department: json['department'] ?? '', affiliationType: json['affiliationType'] ?? '', companyCode: json['companyCode'] ?? '', sessionAuthenticatedAt: json['sessionAuthenticatedAt'] as String?, metadata: json['metadata'] != null ? Map.from(json['metadata']) : null, tenant: json['tenant'] != null ? Tenant.fromJson(json['tenant']) : null, ); } Map toJson() { return { 'id': id, 'email': email, 'name': name, 'phone': phone, 'department': department, 'affiliationType': affiliationType, 'companyCode': companyCode, 'sessionAuthenticatedAt': sessionAuthenticatedAt, 'metadata': metadata, 'tenant': tenant?.toJson(), }; } UserProfile copyWith({String? name, String? phone, String? department}) { return UserProfile( id: id, email: email, name: name ?? this.name, phone: phone ?? this.phone, department: department ?? this.department, affiliationType: affiliationType, companyCode: companyCode, sessionAuthenticatedAt: sessionAuthenticatedAt, tenant: tenant, ); } }