사용하지 않는 파일 정리 전 백업 (Phase 10 완료 후 상태)
This commit is contained in:
@@ -1,142 +1,122 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import '../../../models/user_model.dart';
|
||||
import 'package:superport/data/models/company/company_dto.dart';
|
||||
import 'package:superport/models/user_model.dart';
|
||||
|
||||
part 'user_dto.freezed.dart';
|
||||
part 'user_dto.g.dart';
|
||||
|
||||
/// 사용자 데이터 전송 객체 (서버 API v0.2.1 대응)
|
||||
/// GET /api/v1/users/{id} 응답 형태
|
||||
@freezed
|
||||
class UserDto with _$UserDto {
|
||||
const UserDto._();
|
||||
const UserDto._(); // Private constructor for getters
|
||||
|
||||
const factory UserDto({
|
||||
/// 사용자 ID (자동 생성)
|
||||
required int id,
|
||||
|
||||
/// 사용자명 (유니크, 필수)
|
||||
required String username,
|
||||
|
||||
/// 이름 (필수)
|
||||
int? id,
|
||||
required String name,
|
||||
|
||||
/// 이메일 (유니크, 필수)
|
||||
required String email,
|
||||
|
||||
/// 전화번호 (선택)
|
||||
String? phone,
|
||||
String? email,
|
||||
@JsonKey(name: 'companies_id') required int companiesId,
|
||||
|
||||
/// 권한 (admin, manager, staff)
|
||||
required String role,
|
||||
|
||||
/// 활성화 상태 (기본값: true)
|
||||
@JsonKey(name: 'is_active') required bool isActive,
|
||||
|
||||
/// 생성일시 (자동 입력)
|
||||
@JsonKey(name: 'created_at') required DateTime createdAt,
|
||||
|
||||
/// 수정일시 (자동 갱신, 선택적)
|
||||
@JsonKey(name: 'updated_at') DateTime? updatedAt,
|
||||
// Nested data (optional, populated in GET requests)
|
||||
@JsonKey(name: 'company') CompanyNameDto? company,
|
||||
}) = _UserDto;
|
||||
|
||||
factory UserDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserDtoFromJson(json);
|
||||
|
||||
/// DTO를 도메인 모델로 변환
|
||||
factory UserDto.fromJson(Map<String, dynamic> json) => _$UserDtoFromJson(json);
|
||||
|
||||
// 도메인 모델로 변환
|
||||
User toDomainModel() {
|
||||
return User(
|
||||
id: id,
|
||||
username: username,
|
||||
email: email,
|
||||
username: name, // 백엔드에서 name이 사실상 username 역할
|
||||
email: email ?? '', // email은 필수이므로 기본값 설정
|
||||
name: name,
|
||||
phone: phone,
|
||||
role: UserRole.fromString(role),
|
||||
isActive: isActive,
|
||||
createdAt: createdAt,
|
||||
updatedAt: updatedAt,
|
||||
role: UserRole.staff, // 기본 권한 (백엔드에서 권한 관리 안함)
|
||||
isActive: true, // 기본값
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 사용자 생성 요청 DTO (POST /api/v1/users)
|
||||
@freezed
|
||||
class CreateUserRequest with _$CreateUserRequest {
|
||||
const factory CreateUserRequest({
|
||||
/// 사용자명 (필수, 유니크, 3자 이상)
|
||||
required String username,
|
||||
|
||||
/// 이메일 (필수, 유니크, 이메일 형식)
|
||||
required String email,
|
||||
|
||||
/// 비밀번호 (필수, 6자 이상)
|
||||
required String password,
|
||||
|
||||
/// 이름 (필수)
|
||||
class UserRequestDto with _$UserRequestDto {
|
||||
const factory UserRequestDto({
|
||||
required String name,
|
||||
|
||||
/// 전화번호 (선택, "010-1234-5678" 형태)
|
||||
String? phone,
|
||||
|
||||
/// 권한 (필수: admin, manager, staff)
|
||||
required String role,
|
||||
}) = _CreateUserRequest;
|
||||
|
||||
factory CreateUserRequest.fromJson(Map<String, dynamic> json) =>
|
||||
_$CreateUserRequestFromJson(json);
|
||||
|
||||
/// 도메인 모델에서 생성 요청 DTO로 변환
|
||||
factory CreateUserRequest.fromDomain(User user, String password) {
|
||||
return CreateUserRequest(
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
password: password,
|
||||
name: user.name,
|
||||
phone: user.phone,
|
||||
role: user.role.name,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 사용자 수정 요청 DTO (PUT /api/v1/users/{id})
|
||||
@freezed
|
||||
class UpdateUserRequest with _$UpdateUserRequest {
|
||||
const factory UpdateUserRequest({
|
||||
/// 이름 (선택)
|
||||
String? name,
|
||||
|
||||
/// 이메일 (선택, 유니크, 이메일 형식)
|
||||
String? email,
|
||||
|
||||
/// 비밀번호 (선택, 6자 이상)
|
||||
String? password,
|
||||
|
||||
/// 전화번호 (선택)
|
||||
String? phone,
|
||||
|
||||
/// 권한 (선택: admin, manager, staff)
|
||||
String? role,
|
||||
}) = _UpdateUserRequest;
|
||||
@JsonKey(name: 'companies_id') required int companiesId,
|
||||
}) = _UserRequestDto;
|
||||
|
||||
factory UpdateUserRequest.fromJson(Map<String, dynamic> json) =>
|
||||
_$UpdateUserRequestFromJson(json);
|
||||
factory UserRequestDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserRequestDtoFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
class UserUpdateRequestDto with _$UserUpdateRequestDto {
|
||||
const factory UserUpdateRequestDto({
|
||||
String? name,
|
||||
String? phone,
|
||||
String? email,
|
||||
@JsonKey(name: 'companies_id') int? companiesId,
|
||||
}) = _UserUpdateRequestDto;
|
||||
|
||||
factory UserUpdateRequestDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserUpdateRequestDtoFromJson(json);
|
||||
|
||||
/// 도메인 모델에서 수정 요청 DTO로 변환
|
||||
factory UpdateUserRequest.fromDomain(User user, {String? newPassword}) {
|
||||
return UpdateUserRequest(
|
||||
// 도메인 모델에서 생성
|
||||
factory UserUpdateRequestDto.fromDomain(User user, {String? newPassword}) {
|
||||
return UserUpdateRequestDto(
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
password: newPassword,
|
||||
phone: user.phone,
|
||||
role: user.role.name,
|
||||
email: user.email,
|
||||
companiesId: null, // companiesId는 업데이트에서 처리하지 않음
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 사용자명 중복 확인 응답 DTO
|
||||
@freezed
|
||||
class UserListResponse with _$UserListResponse {
|
||||
const factory UserListResponse({
|
||||
@JsonKey(name: 'data') required List<UserDto> items,
|
||||
@JsonKey(name: 'total') required int totalCount,
|
||||
@JsonKey(name: 'page') required int currentPage,
|
||||
@JsonKey(name: 'total_pages') required int totalPages,
|
||||
@JsonKey(name: 'page_size') int? pageSize,
|
||||
}) = _UserListResponse;
|
||||
|
||||
factory UserListResponse.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserListResponseFromJson(json);
|
||||
}
|
||||
|
||||
// UserListDto (legacy support)
|
||||
@freezed
|
||||
class UserListDto with _$UserListDto {
|
||||
const UserListDto._(); // Private constructor for methods
|
||||
|
||||
const factory UserListDto({
|
||||
@JsonKey(name: 'users') required List<UserDto> users,
|
||||
@JsonKey(name: 'total') required int total,
|
||||
@JsonKey(name: 'page') 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);
|
||||
|
||||
// 도메인 모델 리스트로 변환
|
||||
List<User> toDomainModels() {
|
||||
return users.map((dto) => dto.toDomainModel()).toList();
|
||||
}
|
||||
|
||||
// 페이지네이션 정보 접근을 위한 getter들
|
||||
int get first => page;
|
||||
int get last => totalPages;
|
||||
}
|
||||
|
||||
// CheckUsernameResponse (legacy support)
|
||||
@freezed
|
||||
class CheckUsernameResponse with _$CheckUsernameResponse {
|
||||
const factory CheckUsernameResponse({
|
||||
required bool available,
|
||||
@JsonKey(name: 'available') required bool available,
|
||||
String? message,
|
||||
}) = _CheckUsernameResponse;
|
||||
|
||||
@@ -144,55 +124,3 @@ class CheckUsernameResponse with _$CheckUsernameResponse {
|
||||
_$CheckUsernameResponseFromJson(json);
|
||||
}
|
||||
|
||||
/// 사용자 목록 응답 DTO (기존 PaginatedResponse 형태 유지)
|
||||
@freezed
|
||||
class UserListDto with _$UserListDto {
|
||||
const 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;
|
||||
|
||||
// 페이지네이션 응답과 호환성을 위한 getter들
|
||||
List<UserDto> 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<String, dynamic> json) =>
|
||||
_$UserListDtoFromJson(json);
|
||||
|
||||
/// DTO 목록을 도메인 모델 목록으로 변환
|
||||
List<User> toDomainModels() {
|
||||
return users.map((dto) => dto.toDomainModel()).toList();
|
||||
}
|
||||
}
|
||||
|
||||
/// 사용자 상세 응답 DTO
|
||||
@freezed
|
||||
class UserDetailDto with _$UserDetailDto {
|
||||
const factory UserDetailDto({
|
||||
required UserDto user,
|
||||
}) = _UserDetailDto;
|
||||
|
||||
factory UserDetailDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserDetailDtoFromJson(json);
|
||||
}
|
||||
|
||||
/// 일반적인 사용자 API 응답 DTO
|
||||
@freezed
|
||||
class UserResponse with _$UserResponse {
|
||||
const factory UserResponse({
|
||||
required UserDto user,
|
||||
String? message,
|
||||
}) = _UserResponse;
|
||||
|
||||
factory UserResponse.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserResponseFromJson(json);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user