Files
superport_v2/lib/features/masters/user/domain/entities/user.dart

100 lines
2.3 KiB
Dart

/// 사용자(User) 도메인 엔티티.
class UserAccount {
UserAccount({
this.id,
required this.employeeNo,
required this.employeeName,
this.email,
this.mobileNo,
this.group,
this.isActive = true,
this.isDeleted = false,
this.note,
this.createdAt,
this.updatedAt,
});
final int? id;
final String employeeNo;
final String employeeName;
final String? email;
final String? mobileNo;
final UserGroup? group;
final bool isActive;
final bool isDeleted;
final String? note;
final DateTime? createdAt;
final DateTime? updatedAt;
/// 선택된 속성만 변경한 새 인스턴스를 반환한다.
UserAccount copyWith({
int? id,
String? employeeNo,
String? employeeName,
String? email,
String? mobileNo,
UserGroup? group,
bool? isActive,
bool? isDeleted,
String? note,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return UserAccount(
id: id ?? this.id,
employeeNo: employeeNo ?? this.employeeNo,
employeeName: employeeName ?? this.employeeName,
email: email ?? this.email,
mobileNo: mobileNo ?? this.mobileNo,
group: group ?? this.group,
isActive: isActive ?? this.isActive,
isDeleted: isDeleted ?? this.isDeleted,
note: note ?? this.note,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
);
}
}
/// 사용자에 연결된 그룹 정보.
class UserGroup {
UserGroup({required this.id, required this.groupName});
final int id;
final String groupName;
}
/// 사용자 생성/수정 입력 모델.
class UserInput {
UserInput({
required this.employeeNo,
required this.employeeName,
required this.groupId,
this.email,
this.mobileNo,
this.isActive = true,
this.note,
});
final String employeeNo;
final String employeeName;
final int groupId;
final String? email;
final String? mobileNo;
final bool isActive;
final String? note;
/// API 요청 바디로 직렬화한다.
Map<String, dynamic> toPayload() {
return {
'employee_no': employeeNo,
'employee_name': employeeName,
'group_id': groupId,
'email': email,
'mobile_no': mobileNo,
'is_active': isActive,
'note': note,
};
}
}