backup: 사용하지 않는 파일 삭제 전 복구 지점

- 전체 371개 파일 중 82개 미사용 파일 식별
- Phase 1: 33개 파일 삭제 예정 (100% 안전)
- Phase 2: 30개 파일 삭제 검토 예정
- Phase 3: 19개 파일 수동 검토 예정

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-09-02 19:51:40 +09:00
parent 650cd4be55
commit c419f8f458
149 changed files with 12934 additions and 3644 deletions

View File

@@ -9,12 +9,17 @@ import 'package:superport/data/models/auth/login_response.dart';
import 'package:superport/data/models/auth/logout_request.dart';
import 'package:superport/data/models/auth/refresh_token_request.dart';
import 'package:superport/data/models/auth/token_response.dart';
import 'package:superport/data/models/auth/auth_user.dart';
import 'package:superport/data/models/auth/change_password_request.dart';
import 'package:superport/data/models/auth/message_response.dart';
import 'package:superport/core/utils/debug_logger.dart';
abstract class AuthRemoteDataSource {
Future<Either<Failure, LoginResponse>> login(LoginRequest request);
Future<Either<Failure, void>> logout(LogoutRequest request);
Future<Either<Failure, TokenResponse>> refreshToken(RefreshTokenRequest request);
Future<Either<Failure, AuthUser>> getCurrentAdmin();
Future<Either<Failure, MessageResponse>> changePassword(ChangePasswordRequest request);
}
@LazySingleton(as: AuthRemoteDataSource)
@@ -242,4 +247,161 @@ class AuthRemoteDataSourceImpl implements AuthRemoteDataSource {
return Left(ServerFailure(message: '토큰 갱신 중 오류가 발생했습니다.'));
}
}
@override
Future<Either<Failure, AuthUser>> getCurrentAdmin() async {
try {
DebugLogger.logApiRequest(url: '/auth/me', method: 'GET');
final response = await _apiClient.get('/auth/me');
DebugLogger.logApiResponse(
url: '/auth/me',
statusCode: response.statusCode,
data: response.data,
);
if (response.statusCode == 200 && response.data != null) {
final responseData = response.data as Map<String, dynamic>;
// 응답 데이터 구조 검증
DebugLogger.validateResponseStructure(
responseData,
['id', 'name', 'email'],
responseName: 'CurrentAdmin',
);
final authUser = DebugLogger.parseJsonWithLogging(
responseData,
AuthUser.fromJson,
objectName: 'AuthUser',
);
if (authUser != null) {
DebugLogger.log(
'getCurrentAdmin 성공',
tag: 'API_SUCCESS',
data: {
'url': '/auth/me',
'adminId': authUser.id,
'adminEmail': authUser.email,
'adminName': authUser.name,
},
);
return Right(authUser);
} else {
return Left(ServerFailure(message: 'AuthUser 파싱 실패'));
}
} else {
return Left(ServerFailure(
message: response.statusMessage ?? '관리자 정보 조회 실패',
));
}
} on DioException catch (e) {
DebugLogger.logError(
'getCurrentAdmin DioException',
error: e,
additionalData: {
'type': e.type.toString(),
'statusCode': e.response?.statusCode,
},
);
if (e.response?.statusCode == 401) {
return Left(AuthenticationFailure(
message: '인증이 필요합니다. 다시 로그인해주세요.',
));
}
return Left(ServerFailure(message: '관리자 정보 조회 중 오류가 발생했습니다.'));
} catch (e, stackTrace) {
DebugLogger.logError(
'getCurrentAdmin 예상치 못한 예외',
error: e,
stackTrace: stackTrace,
);
return Left(ServerFailure(message: '관리자 정보 조회 중 오류가 발생했습니다.'));
}
}
@override
Future<Either<Failure, MessageResponse>> changePassword(ChangePasswordRequest request) async {
try {
DebugLogger.logApiRequest(url: '/auth/change-password', method: 'POST');
final response = await _apiClient.post(
'/auth/change-password',
data: request.toJson(),
);
DebugLogger.logApiResponse(
url: '/auth/change-password',
statusCode: response.statusCode,
data: response.data,
);
if (response.statusCode == 200 && response.data != null) {
final responseData = response.data as Map<String, dynamic>;
// 응답 데이터 구조 검증
DebugLogger.validateResponseStructure(
responseData,
['message'],
responseName: 'ChangePasswordResponse',
);
final messageResponse = DebugLogger.parseJsonWithLogging(
responseData,
MessageResponse.fromJson,
objectName: 'MessageResponse',
);
if (messageResponse != null) {
DebugLogger.log(
'changePassword 성공',
tag: 'API_SUCCESS',
data: {
'url': '/auth/change-password',
'message': messageResponse.message,
},
);
return Right(messageResponse);
} else {
return Left(ServerFailure(message: 'MessageResponse 파싱 실패'));
}
} else {
return Left(ServerFailure(
message: response.statusMessage ?? '비밀번호 변경 실패',
));
}
} on DioException catch (e) {
DebugLogger.logError(
'changePassword DioException',
error: e,
additionalData: {
'type': e.type.toString(),
'statusCode': e.response?.statusCode,
},
);
if (e.response?.statusCode == 401) {
return Left(AuthenticationFailure(
message: '기존 비밀번호가 올바르지 않습니다.',
));
} else if (e.response?.statusCode == 400) {
return Left(ValidationFailure(
message: '비밀번호 형식이 올바르지 않습니다.',
));
}
return Left(ServerFailure(message: '비밀번호 변경 중 오류가 발생했습니다.'));
} catch (e, stackTrace) {
DebugLogger.logError(
'changePassword 예상치 못한 예외',
error: e,
stackTrace: stackTrace,
);
return Left(ServerFailure(message: '비밀번호 변경 중 오류가 발생했습니다.'));
}
}
}