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:
@@ -1,9 +1,8 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:superport/data/models/zipcode_dto.dart';
|
||||
import 'package:superport/domain/usecases/zipcode_usecase.dart';
|
||||
import 'package:superport/utils/constants.dart';
|
||||
import 'package:superport/core/constants/app_constants.dart';
|
||||
|
||||
@injectable
|
||||
class ZipcodeController extends ChangeNotifier {
|
||||
@@ -11,7 +10,7 @@ class ZipcodeController extends ChangeNotifier {
|
||||
|
||||
ZipcodeController(this._zipcodeUseCase);
|
||||
|
||||
// 상태 변수들
|
||||
// 핵심 상태만 유지
|
||||
List<ZipcodeDto> _zipcodes = [];
|
||||
ZipcodeDto? _selectedZipcode;
|
||||
bool _isLoading = false;
|
||||
@@ -21,20 +20,17 @@ class ZipcodeController extends ChangeNotifier {
|
||||
int _currentPage = 1;
|
||||
int _totalPages = 1;
|
||||
int _totalCount = 0;
|
||||
final int _pageSize = PaginationConstants.defaultPageSize;
|
||||
final int _pageSize = AppConstants.defaultPageSize;
|
||||
|
||||
// 검색 및 필터
|
||||
String _searchQuery = '';
|
||||
// 단순한 필터 (2개 드롭다운 + 1개 텍스트)
|
||||
String? _selectedSido;
|
||||
String? _selectedGu;
|
||||
String? _selectedGu;
|
||||
String _searchQuery = '';
|
||||
|
||||
// 시도/구 목록 캐시
|
||||
// Hierarchy 데이터 (단 2개만)
|
||||
List<String> _sidoList = [];
|
||||
List<String> _guList = [];
|
||||
|
||||
// 디바운스를 위한 타이머
|
||||
Timer? _debounceTimer;
|
||||
|
||||
// Getters
|
||||
List<ZipcodeDto> get zipcodes => _zipcodes;
|
||||
ZipcodeDto? get selectedZipcode => _selectedZipcode;
|
||||
@@ -51,20 +47,20 @@ class ZipcodeController extends ChangeNotifier {
|
||||
bool get hasNextPage => _currentPage < _totalPages;
|
||||
bool get hasPreviousPage => _currentPage > 1;
|
||||
|
||||
// 초기 데이터 로드
|
||||
// 초기화 (단순함)
|
||||
Future<void> initialize() async {
|
||||
try {
|
||||
_isLoading = true;
|
||||
_setLoading(true);
|
||||
_zipcodes = [];
|
||||
_selectedZipcode = null;
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
// 시도 목록 로드
|
||||
// 시도 목록 로드 (Hierarchy API만 사용)
|
||||
await _loadSidoList();
|
||||
|
||||
// 초기 우편번호 목록 로드 (첫 페이지)
|
||||
await searchZipcodes();
|
||||
await _executeSearch();
|
||||
} catch (e) {
|
||||
_errorMessage = '초기화 중 오류가 발생했습니다.';
|
||||
_isLoading = false;
|
||||
@@ -72,8 +68,94 @@ class ZipcodeController extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
// 우편번호 검색
|
||||
Future<void> searchZipcodes({bool refresh = false}) async {
|
||||
// 시도 선택 (단순함)
|
||||
Future<void> setSido(String? sido) async {
|
||||
try {
|
||||
_selectedSido = sido;
|
||||
_selectedGu = null; // 구 초기화
|
||||
_guList = [];
|
||||
notifyListeners();
|
||||
|
||||
// 선택된 시도의 구 목록 로드
|
||||
if (sido != null && sido.isNotEmpty) {
|
||||
await _loadGuListBySido(sido);
|
||||
}
|
||||
|
||||
// 실시간 검색 실행
|
||||
await _executeSearch();
|
||||
} catch (e) {
|
||||
debugPrint('시도 선택 오류: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// 구 선택 (단순함)
|
||||
Future<void> setGu(String? gu) async {
|
||||
try {
|
||||
_selectedGu = gu;
|
||||
notifyListeners();
|
||||
|
||||
// 실시간 검색 실행
|
||||
await _executeSearch();
|
||||
} catch (e) {
|
||||
debugPrint('구 선택 오류: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// 검색어 설정 (실시간, 디바운스 없음)
|
||||
void setSearchQuery(String query) {
|
||||
_searchQuery = query;
|
||||
notifyListeners();
|
||||
_executeSearch(); // 실시간 검색
|
||||
}
|
||||
|
||||
// 필터 초기화 (단순함)
|
||||
Future<void> clearFilters() async {
|
||||
_searchQuery = '';
|
||||
_selectedSido = null;
|
||||
_selectedGu = null;
|
||||
_guList = [];
|
||||
_currentPage = 1;
|
||||
notifyListeners();
|
||||
|
||||
await _executeSearch();
|
||||
}
|
||||
|
||||
// 페이지 이동
|
||||
Future<void> goToPage(int page) async {
|
||||
if (page < 1 || page > _totalPages) return;
|
||||
|
||||
_currentPage = page;
|
||||
await _executeSearch();
|
||||
}
|
||||
|
||||
// 다음 페이지
|
||||
Future<void> nextPage() async {
|
||||
if (hasNextPage) {
|
||||
await goToPage(_currentPage + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 이전 페이지
|
||||
Future<void> previousPage() async {
|
||||
if (hasPreviousPage) {
|
||||
await goToPage(_currentPage - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 우편번호 선택
|
||||
void selectZipcode(ZipcodeDto zipcode) {
|
||||
_selectedZipcode = zipcode;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// 선택 초기화
|
||||
void clearSelection() {
|
||||
_selectedZipcode = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// 검색 실행 (핵심 로직)
|
||||
Future<void> _executeSearch({bool refresh = false}) async {
|
||||
if (refresh) {
|
||||
_currentPage = 1;
|
||||
}
|
||||
@@ -103,154 +185,35 @@ class ZipcodeController extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
// 특정 우편번호로 정확한 주소 조회
|
||||
Future<void> getZipcodeByNumber(int zipcode) async {
|
||||
_setLoading(true);
|
||||
_clearError();
|
||||
|
||||
try {
|
||||
_selectedZipcode = await _zipcodeUseCase.getZipcodeByNumber(zipcode);
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
_setError('우편번호 조회에 실패했습니다: ${e.toString()}');
|
||||
} finally {
|
||||
_setLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
// 주소로 우편번호 빠른 검색
|
||||
Future<List<ZipcodeDto>> quickSearchByAddress(String address) async {
|
||||
if (address.trim().isEmpty) return [];
|
||||
|
||||
try {
|
||||
return await _zipcodeUseCase.searchByAddress(address);
|
||||
} catch (e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// 검색어 설정 (디바운스 적용)
|
||||
void setSearchQuery(String query) {
|
||||
_searchQuery = query;
|
||||
notifyListeners();
|
||||
|
||||
// 디바운스 처리 (500ms 대기 후 검색 실행)
|
||||
_debounceTimer?.cancel();
|
||||
_debounceTimer = Timer(const Duration(milliseconds: 500), () {
|
||||
searchZipcodes(refresh: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 즉시 검색 실행 (디바운스 무시)
|
||||
Future<void> executeSearch() async {
|
||||
_debounceTimer?.cancel();
|
||||
_currentPage = 1;
|
||||
await searchZipcodes();
|
||||
}
|
||||
|
||||
// 시도 선택
|
||||
Future<void> setSido(String? sido) async {
|
||||
try {
|
||||
_selectedSido = sido;
|
||||
_selectedGu = null; // 시도 변경 시 구 초기화
|
||||
_guList = []; // 구 목록 초기화
|
||||
notifyListeners();
|
||||
|
||||
// 선택된 시도에 따른 구 목록 로드
|
||||
if (sido != null && sido.isNotEmpty) {
|
||||
await _loadGuListBySido(sido);
|
||||
}
|
||||
|
||||
// 검색 새로고침
|
||||
await searchZipcodes(refresh: true);
|
||||
} catch (e) {
|
||||
debugPrint('시도 선택 오류: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// 구 선택
|
||||
Future<void> setGu(String? gu) async {
|
||||
try {
|
||||
_selectedGu = gu;
|
||||
notifyListeners();
|
||||
|
||||
// 검색 새로고침
|
||||
await searchZipcodes(refresh: true);
|
||||
} catch (e) {
|
||||
debugPrint('구 선택 오류: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// 필터 초기화
|
||||
Future<void> clearFilters() async {
|
||||
_searchQuery = '';
|
||||
_selectedSido = null;
|
||||
_selectedGu = null;
|
||||
_guList = [];
|
||||
_currentPage = 1;
|
||||
notifyListeners();
|
||||
|
||||
await searchZipcodes();
|
||||
}
|
||||
|
||||
// 페이지 이동
|
||||
Future<void> goToPage(int page) async {
|
||||
if (page < 1 || page > _totalPages) return;
|
||||
|
||||
_currentPage = page;
|
||||
await searchZipcodes();
|
||||
}
|
||||
|
||||
// 다음 페이지
|
||||
Future<void> nextPage() async {
|
||||
if (hasNextPage) {
|
||||
await goToPage(_currentPage + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 이전 페이지
|
||||
Future<void> previousPage() async {
|
||||
if (hasPreviousPage) {
|
||||
await goToPage(_currentPage - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 시도 목록 로드 (캐시)
|
||||
// 시도 목록 로드 (Hierarchy API만 사용, fallback 없음)
|
||||
Future<void> _loadSidoList() async {
|
||||
try {
|
||||
_sidoList = await _zipcodeUseCase.getAllSidoList();
|
||||
debugPrint('=== 시도 목록 로드 완료 ===');
|
||||
debugPrint('총 시도 개수: ${_sidoList.length}');
|
||||
debugPrint('시도 목록: $_sidoList');
|
||||
final response = await _zipcodeUseCase.getHierarchySidos();
|
||||
_sidoList = response.data;
|
||||
debugPrint('=== Hierarchy 시도 목록 로드 완료 ===');
|
||||
debugPrint('총 시도 개수: ${response.meta.total}');
|
||||
debugPrint('시도 목록: ${response.data}');
|
||||
} catch (e) {
|
||||
debugPrint('시도 목록 로드 실패: $e');
|
||||
debugPrint('Hierarchy 시도 목록 로드 실패: $e');
|
||||
_sidoList = [];
|
||||
}
|
||||
}
|
||||
|
||||
// 선택된 시도의 구 목록 로드
|
||||
// 구 목록 로드 (Hierarchy API만 사용, fallback 없음)
|
||||
Future<void> _loadGuListBySido(String sido) async {
|
||||
try {
|
||||
_guList = await _zipcodeUseCase.getGuListBySido(sido);
|
||||
final response = await _zipcodeUseCase.getHierarchyGusBySido(sido);
|
||||
_guList = response.data;
|
||||
debugPrint('=== Hierarchy 구 목록 로드 완료 ===');
|
||||
debugPrint('시도: $sido, 구 개수: ${response.meta.total}');
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
debugPrint('구 목록 로드 실패: $e');
|
||||
debugPrint('Hierarchy 구 목록 로드 실패: $e');
|
||||
_guList = [];
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// 우편번호 선택
|
||||
void selectZipcode(ZipcodeDto zipcode) {
|
||||
_selectedZipcode = zipcode;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// 선택 초기화
|
||||
void clearSelection() {
|
||||
_selectedZipcode = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// 내부 헬퍼 메서드
|
||||
void _setLoading(bool loading) {
|
||||
_isLoading = loading;
|
||||
@@ -268,7 +231,6 @@ class ZipcodeController extends ChangeNotifier {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_debounceTimer?.cancel();
|
||||
_zipcodes = [];
|
||||
_selectedZipcode = null;
|
||||
super.dispose();
|
||||
|
||||
Reference in New Issue
Block a user