import 'package:freezed_annotation/freezed_annotation.dart'; part 'user_dto.freezed.dart'; part 'user_dto.g.dart'; enum UserRole { @JsonValue('admin') admin, @JsonValue('manager') manager, @JsonValue('member') member, } @freezed class UserDto with _$UserDto { const factory UserDto({ required int id, required String username, required String name, String? email, String? phone, required String role, @JsonKey(name: 'company_id') int? companyId, @JsonKey(name: 'company_name') String? companyName, @JsonKey(name: 'branch_id') int? branchId, @JsonKey(name: 'branch_name') String? branchName, @JsonKey(name: 'is_active') required bool isActive, @JsonKey(name: 'last_login_at') DateTime? lastLoginAt, @JsonKey(name: 'created_at') required DateTime createdAt, @JsonKey(name: 'updated_at') required DateTime updatedAt, }) = _UserDto; factory UserDto.fromJson(Map json) => _$UserDtoFromJson(json); } @freezed class CreateUserRequest with _$CreateUserRequest { const factory CreateUserRequest({ required String username, String? email, required String password, required String name, String? phone, required String role, @JsonKey(name: 'company_id') int? companyId, @JsonKey(name: 'branch_id') int? branchId, }) = _CreateUserRequest; factory CreateUserRequest.fromJson(Map json) => _$CreateUserRequestFromJson(json); } @freezed class UpdateUserRequest with _$UpdateUserRequest { const factory UpdateUserRequest({ String? name, String? email, String? password, String? phone, String? role, @JsonKey(name: 'company_id') int? companyId, @JsonKey(name: 'branch_id') int? branchId, @JsonKey(name: 'is_active') bool? isActive, }) = _UpdateUserRequest; factory UpdateUserRequest.fromJson(Map json) => _$UpdateUserRequestFromJson(json); } @freezed class ChangeStatusRequest with _$ChangeStatusRequest { const factory ChangeStatusRequest({ @JsonKey(name: 'is_active') required bool isActive, }) = _ChangeStatusRequest; factory ChangeStatusRequest.fromJson(Map json) => _$ChangeStatusRequestFromJson(json); } @freezed class ChangePasswordRequest with _$ChangePasswordRequest { const factory ChangePasswordRequest({ @JsonKey(name: 'current_password') required String currentPassword, @JsonKey(name: 'new_password') required String newPassword, }) = _ChangePasswordRequest; factory ChangePasswordRequest.fromJson(Map json) => _$ChangePasswordRequestFromJson(json); } @freezed class UserListDto with _$UserListDto { const UserListDto._(); const factory UserListDto({ required List users, required int total, required int page, @JsonKey(name: 'per_page') required int perPage, @JsonKey(name: 'total_pages') required int totalPages, }) = _UserListDto; // 페이지네이션 응답과 호환성을 위한 getter들 List get items => users; int get size => perPage; int get totalElements => total; bool get first => page <= 1; bool get last => page >= totalPages; factory UserListDto.fromJson(Map json) => _$UserListDtoFromJson(json); } @freezed class UserDetailDto with _$UserDetailDto { const factory UserDetailDto({ required UserDto user, }) = _UserDetailDto; factory UserDetailDto.fromJson(Map json) => _$UserDetailDtoFromJson(json); } @freezed class UserResponse with _$UserResponse { const factory UserResponse({ required UserDto user, String? message, }) = _UserResponse; factory UserResponse.fromJson(Map json) => _$UserResponseFromJson(json); }