File-Drive-App-Frontend/lib/models/user_profile.dart

87 lines
2.3 KiB
Dart

class UserProfile {
const UserProfile({
required this.id,
required this.username,
required this.name,
required this.phone,
required this.email,
required this.gender,
required this.age,
this.memberships = const [],
});
final String id;
final String username;
final String name;
final String phone;
final String email;
final String gender;
final int age;
final List<OrganizationMembership> memberships;
List<OrganizationMembership> get approvedMemberships => memberships
.where(
(item) =>
item.status == 'APPROVED' && item.organization.status == 'ACTIVE',
)
.toList();
factory UserProfile.fromJson(Map<String, dynamic> json) => UserProfile(
id: json['id'] as String,
username: json['username'] as String,
name: json['name'] as String,
phone: json['phone'] as String,
email: json['email'] as String,
gender: json['gender'] as String,
age: json['age'] as int,
memberships: (json['memberships'] as List? ?? const [])
.map((item) => OrganizationMembership.fromJson(item))
.toList(),
);
}
class OrganizationSummary {
const OrganizationSummary({
required this.id,
required this.code,
required this.name,
required this.status,
});
final String id;
final String code;
final String name;
final String status;
factory OrganizationSummary.fromJson(Map<String, dynamic> json) =>
OrganizationSummary(
id: json['id'] as String,
code: json['code'] as String,
name: json['name'] as String,
status: json['status'] as String,
);
}
class OrganizationMembership {
const OrganizationMembership({
required this.id,
required this.role,
required this.status,
required this.organization,
this.rejectionReason,
});
final String id;
final String role;
final String status;
final String? rejectionReason;
final OrganizationSummary organization;
factory OrganizationMembership.fromJson(Map<String, dynamic> json) =>
OrganizationMembership(
id: json['id'] as String,
role: json['role'] as String,
status: json['status'] as String,
rejectionReason: json['rejectionReason'] as String?,
organization: OrganizationSummary.fromJson(json['organization']),
);
}