사용하지 않는 파일 정리 전 백업 (Phase 10 완료 후 상태)

This commit is contained in:
JiWoong Sul
2025-08-29 15:11:59 +09:00
parent a740ff10c8
commit d916b281a7
333 changed files with 53617 additions and 22574 deletions

View File

@@ -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);
}

File diff suppressed because it is too large Load Diff

View File

@@ -8,86 +8,81 @@ part of 'user_dto.dart';
_$UserDtoImpl _$$UserDtoImplFromJson(Map<String, dynamic> json) =>
_$UserDtoImpl(
id: (json['id'] as num).toInt(),
username: json['username'] as String,
id: (json['id'] as num?)?.toInt(),
name: json['name'] as String,
email: json['email'] as String,
phone: json['phone'] as String?,
role: json['role'] as String,
isActive: json['is_active'] as bool,
createdAt: DateTime.parse(json['created_at'] as String),
updatedAt: json['updated_at'] == null
email: json['email'] as String?,
companiesId: (json['companies_id'] as num).toInt(),
company: json['company'] == null
? null
: DateTime.parse(json['updated_at'] as String),
: CompanyNameDto.fromJson(json['company'] as Map<String, dynamic>),
);
Map<String, dynamic> _$$UserDtoImplToJson(_$UserDtoImpl instance) =>
<String, dynamic>{
'id': instance.id,
'username': instance.username,
'name': instance.name,
'email': instance.email,
'phone': instance.phone,
'role': instance.role,
'is_active': instance.isActive,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt?.toIso8601String(),
'email': instance.email,
'companies_id': instance.companiesId,
'company': instance.company,
};
_$CreateUserRequestImpl _$$CreateUserRequestImplFromJson(
Map<String, dynamic> json) =>
_$CreateUserRequestImpl(
username: json['username'] as String,
email: json['email'] as String,
password: json['password'] as String,
_$UserRequestDtoImpl _$$UserRequestDtoImplFromJson(Map<String, dynamic> json) =>
_$UserRequestDtoImpl(
name: json['name'] as String,
phone: json['phone'] as String?,
role: json['role'] as String,
);
Map<String, dynamic> _$$CreateUserRequestImplToJson(
_$CreateUserRequestImpl instance) =>
<String, dynamic>{
'username': instance.username,
'email': instance.email,
'password': instance.password,
'name': instance.name,
'phone': instance.phone,
'role': instance.role,
};
_$UpdateUserRequestImpl _$$UpdateUserRequestImplFromJson(
Map<String, dynamic> json) =>
_$UpdateUserRequestImpl(
name: json['name'] as String?,
email: json['email'] as String?,
password: json['password'] as String?,
phone: json['phone'] as String?,
role: json['role'] as String?,
companiesId: (json['companies_id'] as num).toInt(),
);
Map<String, dynamic> _$$UpdateUserRequestImplToJson(
_$UpdateUserRequestImpl instance) =>
Map<String, dynamic> _$$UserRequestDtoImplToJson(
_$UserRequestDtoImpl instance) =>
<String, dynamic>{
'name': instance.name,
'email': instance.email,
'password': instance.password,
'phone': instance.phone,
'role': instance.role,
'email': instance.email,
'companies_id': instance.companiesId,
};
_$CheckUsernameResponseImpl _$$CheckUsernameResponseImplFromJson(
_$UserUpdateRequestDtoImpl _$$UserUpdateRequestDtoImplFromJson(
Map<String, dynamic> json) =>
_$CheckUsernameResponseImpl(
available: json['available'] as bool,
message: json['message'] as String?,
_$UserUpdateRequestDtoImpl(
name: json['name'] as String?,
phone: json['phone'] as String?,
email: json['email'] as String?,
companiesId: (json['companies_id'] as num?)?.toInt(),
);
Map<String, dynamic> _$$CheckUsernameResponseImplToJson(
_$CheckUsernameResponseImpl instance) =>
Map<String, dynamic> _$$UserUpdateRequestDtoImplToJson(
_$UserUpdateRequestDtoImpl instance) =>
<String, dynamic>{
'available': instance.available,
'message': instance.message,
'name': instance.name,
'phone': instance.phone,
'email': instance.email,
'companies_id': instance.companiesId,
};
_$UserListResponseImpl _$$UserListResponseImplFromJson(
Map<String, dynamic> json) =>
_$UserListResponseImpl(
items: (json['data'] as List<dynamic>)
.map((e) => UserDto.fromJson(e as Map<String, dynamic>))
.toList(),
totalCount: (json['total'] as num).toInt(),
currentPage: (json['page'] as num).toInt(),
totalPages: (json['total_pages'] as num).toInt(),
pageSize: (json['page_size'] as num?)?.toInt(),
);
Map<String, dynamic> _$$UserListResponseImplToJson(
_$UserListResponseImpl instance) =>
<String, dynamic>{
'data': instance.items,
'total': instance.totalCount,
'page': instance.currentPage,
'total_pages': instance.totalPages,
'page_size': instance.pageSize,
};
_$UserListDtoImpl _$$UserListDtoImplFromJson(Map<String, dynamic> json) =>
@@ -110,24 +105,16 @@ Map<String, dynamic> _$$UserListDtoImplToJson(_$UserListDtoImpl instance) =>
'total_pages': instance.totalPages,
};
_$UserDetailDtoImpl _$$UserDetailDtoImplFromJson(Map<String, dynamic> json) =>
_$UserDetailDtoImpl(
user: UserDto.fromJson(json['user'] as Map<String, dynamic>),
);
Map<String, dynamic> _$$UserDetailDtoImplToJson(_$UserDetailDtoImpl instance) =>
<String, dynamic>{
'user': instance.user,
};
_$UserResponseImpl _$$UserResponseImplFromJson(Map<String, dynamic> json) =>
_$UserResponseImpl(
user: UserDto.fromJson(json['user'] as Map<String, dynamic>),
_$CheckUsernameResponseImpl _$$CheckUsernameResponseImplFromJson(
Map<String, dynamic> json) =>
_$CheckUsernameResponseImpl(
available: json['available'] as bool,
message: json['message'] as String?,
);
Map<String, dynamic> _$$UserResponseImplToJson(_$UserResponseImpl instance) =>
Map<String, dynamic> _$$CheckUsernameResponseImplToJson(
_$CheckUsernameResponseImpl instance) =>
<String, dynamic>{
'user': instance.user,
'available': instance.available,
'message': instance.message,
};