/// 사용자(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 toPayload() { return { 'employee_no': employeeNo, 'employee_name': employeeName, 'group_id': groupId, 'email': email, 'mobile_no': mobileNo, 'is_active': isActive, 'note': note, }; } }