feat: 사용자 관리 API 연동 구현
- UserRemoteDataSource: 사용자 CRUD, 상태 변경, 비밀번호 변경, 중복 확인 API 구현 - UserService: DTO-Model 변환 로직 및 역할/전화번호 매핑 처리 - UserListController: ChangeNotifier 패턴 적용, 페이지네이션, 검색, 필터링 기능 추가 - UserFormController: API 연동, username 중복 확인 기능 추가 - user_form.dart: username/password 필드 추가 및 실시간 검증 - user_list_redesign.dart: Provider 패턴 적용, 무한 스크롤 구현 - equipment_out_form_controller.dart: 구문 오류 수정 - API 통합 진행률: 85% (사용자 관리 100% 완료)
This commit is contained in:
102
lib/data/models/user/user_dto.dart
Normal file
102
lib/data/models/user/user_dto.dart
Normal file
@@ -0,0 +1,102 @@
|
||||
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('staff')
|
||||
staff,
|
||||
}
|
||||
|
||||
@freezed
|
||||
class UserDto with _$UserDto {
|
||||
const factory UserDto({
|
||||
required int id,
|
||||
required String username,
|
||||
required String email,
|
||||
required String name,
|
||||
String? phone,
|
||||
required String role,
|
||||
@JsonKey(name: 'company_id') int? companyId,
|
||||
@JsonKey(name: 'branch_id') int? branchId,
|
||||
@JsonKey(name: 'is_active') required bool isActive,
|
||||
@JsonKey(name: 'created_at') required DateTime createdAt,
|
||||
@JsonKey(name: 'updated_at') required DateTime updatedAt,
|
||||
}) = _UserDto;
|
||||
|
||||
factory UserDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserDtoFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class CreateUserRequest with _$CreateUserRequest {
|
||||
const factory CreateUserRequest({
|
||||
required String username,
|
||||
required 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<String, dynamic> 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,
|
||||
}) = _UpdateUserRequest;
|
||||
|
||||
factory UpdateUserRequest.fromJson(Map<String, dynamic> json) =>
|
||||
_$UpdateUserRequestFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ChangeStatusRequest with _$ChangeStatusRequest {
|
||||
const factory ChangeStatusRequest({
|
||||
@JsonKey(name: 'is_active') required bool isActive,
|
||||
}) = _ChangeStatusRequest;
|
||||
|
||||
factory ChangeStatusRequest.fromJson(Map<String, dynamic> 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<String, dynamic> json) =>
|
||||
_$ChangePasswordRequestFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class UserListDto with _$UserListDto {
|
||||
const factory UserListDto({
|
||||
required List<UserDto> users,
|
||||
required int total,
|
||||
required int page,
|
||||
@JsonKey(name: 'per_page') required int perPage,
|
||||
@JsonKey(name: 'total_pages') required int totalPages,
|
||||
}) = _UserListDto;
|
||||
|
||||
factory UserListDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserListDtoFromJson(json);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user