refactor: UI 화면 통합 및 불필요한 파일 정리
Some checks failed
Flutter Test & Quality Check / Build APK (push) Has been cancelled
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled

- 모든 *_redesign.dart 파일을 기본 화면 파일로 통합
- 백업용 컨트롤러 파일들 제거 (*_controller.backup.dart)
- 사용하지 않는 예제 및 테스트 파일 제거
- Clean Architecture 적용 후 남은 정리 작업 완료
- 테스트 코드 정리 및 구조 개선 준비

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-08-11 14:00:44 +09:00
parent 162fe08618
commit 1e6da44917
103 changed files with 1224 additions and 2976 deletions

View File

@@ -216,10 +216,12 @@ class WarehouseAutomatedTest extends BaseScreenTest {
@override
Future<dynamic> performReadOperation(TestData data) async {
return await warehouseService.getWarehouseLocations(
final result = await warehouseService.getWarehouseLocations(
page: 1,
perPage: 20,
);
// PaginatedResponse의 items를 반환하여 List처럼 사용할 수 있도록 함
return result.items;
}
@override
@@ -310,9 +312,9 @@ class WarehouseTestData {
final purposes = ['물류', '보관', '배송', '집하', '분류', '냉동', '냉장', '특수', '일반', '대형'];
final suffixes = ['창고', '센터', '물류센터', '보관소', '집하장'];
final type = types[random.nextInt(types.length)];
final purpose = purposes[random.nextInt(purposes.length)];
final suffix = suffixes[random.nextInt(suffixes.length)];
final type = types[random.nextInt(types.items.length)];
final purpose = purposes[random.nextInt(purposes.items.length)];
final suffix = suffixes[random.nextInt(suffixes.items.length)];
final timestamp = DateTime.now().millisecondsSinceEpoch;
return '$type $purpose$suffix - TEST$timestamp';
@@ -329,9 +331,9 @@ class WarehouseTestData {
'산업단지', '물류단지', '유통단지', '첨단산업단지', '일반산업단지', '국가산업단지'
];
final city = cities[random.nextInt(cities.length)];
final district = districts[random.nextInt(districts.length)];
final industrial = industrialAreas[random.nextInt(industrialAreas.length)];
final city = cities[random.nextInt(cities.items.length)];
final district = districts[random.nextInt(districts.items.length)];
final industrial = industrialAreas[random.nextInt(industrialAreas.items.length)];
final number = random.nextInt(500) + 1;
final detail = '$industrial $number블록 ${random.nextInt(10) + 1}';
@@ -360,7 +362,7 @@ class WarehouseTestData {
final featureCount = random.nextInt(3) + 1; // 1-3개 특징
for (int i = 0; i < featureCount; i++) {
final feature = features[random.nextInt(features.length)];
final feature = features[random.nextInt(features.items.length)];
if (!selectedFeatures.contains(feature)) {
selectedFeatures.add(feature);
}
@@ -374,8 +376,8 @@ class WarehouseTestData {
final lastNames = ['', '', '', '', '', '', '', '', '', ''];
final firstNames = ['창고장', '소장', '센터장', '팀장', '과장', '부장', '이사', '실장'];
final lastName = lastNames[random.nextInt(lastNames.length)];
final firstName = firstNames[random.nextInt(firstNames.length)];
final lastName = lastNames[random.nextInt(lastNames.items.length)];
final firstName = firstNames[random.nextInt(firstNames.items.length)];
return '$lastName$firstName';
}
@@ -383,7 +385,7 @@ class WarehouseTestData {
// 연락처 생성기
static String generateContact() {
final areaCodes = ['02', '031', '032', '033', '041', '042', '043', '051', '052', '053'];
final areaCode = areaCodes[random.nextInt(areaCodes.length)];
final areaCode = areaCodes[random.nextInt(areaCodes.items.length)];
final middle = random.nextInt(9000) + 1000;
final last = random.nextInt(9000) + 1000;
return '$areaCode-$middle-$last';
@@ -392,7 +394,7 @@ class WarehouseTestData {
// 창고 용량 생성기 (평방미터)
static int generateCapacity() {
final capacities = [500, 1000, 1500, 2000, 3000, 5000, 10000, 15000, 20000];
return capacities[random.nextInt(capacities.length)];
return capacities[random.nextInt(capacities.items.length)];
}
}
@@ -419,7 +421,7 @@ extension on WarehouseAutomatedTest {
await _testWarehouseUpdate(createdWarehouse.id);
// 6. 창고 검색 테스트
await _testWarehouseSearch(createdWarehouse.name.split(' ').first);
await _testWarehouseSearch(createdWarehouse.name.split(' ').items.first);
// 7. 활성/비활성 필터링 테스트
await _testActiveFiltering();
@@ -458,10 +460,11 @@ extension on WarehouseAutomatedTest {
_log('창고 목록 조회 테스트 시작');
try {
final warehouses = await warehouseService.getWarehouseLocations(
final warehouseResult = await warehouseService.getWarehouseLocations(
page: 1,
perPage: 10,
);
final warehouses = warehouseResult.items;
_log('창고 목록 조회 성공: ${warehouses.length}개 창고');
if (warehouses.isNotEmpty) {
@@ -600,12 +603,12 @@ extension on WarehouseAutomatedTest {
try {
// search 파라미터가 지원되는지 확인
final searchResults = await warehouseService.searchWarehouseLocations(
keyword: searchKeyword.split(' ').first, // 첫 단어만 사용
keyword: searchKeyword.split(' ').items.first, // 첫 단어만 사용
page: 1,
perPage: 10,
);
_log('검색 결과: ${searchResults.length}개 창고');
_log('검색 결과: ${searchResults.items.length}개 창고');
testContext.setData('searchResults', searchResults);
testContext.setData('searchSuccess', true);
} catch (e) {
@@ -613,16 +616,17 @@ extension on WarehouseAutomatedTest {
// 검색 기능이 없으면 전체 목록에서 필터링
try {
final allWarehouses = await warehouseService.getWarehouseLocations(
final allWarehousesResult = await warehouseService.getWarehouseLocations(
page: 1,
perPage: 50,
);
final allWarehouses = allWarehousesResult.items;
final filtered = allWarehouses.where((w) =>
final filtered = allWarehouses.items.where((w) =>
w.name.toLowerCase().contains(searchKeyword.toLowerCase())
).toList();
_log('필터링 결과: ${filtered.length}개 창고');
_log('필터링 결과: ${filtered.items.length}개 창고');
testContext.setData('searchResults', filtered);
testContext.setData('searchSuccess', true);
} catch (e2) {
@@ -638,21 +642,23 @@ extension on WarehouseAutomatedTest {
try {
// 활성 창고만 조회
_log('활성 창고 조회 중...');
final activeWarehouses = await warehouseService.getWarehouseLocations(
final activeWarehousesResult = await warehouseService.getWarehouseLocations(
page: 1,
perPage: 10,
isActive: true,
);
_log('활성 창고: ${activeWarehouses.length}');
final activeWarehouses = activeWarehousesResult.items;
_log('활성 창고: ${activeWarehouses.items.length}');
// 비활성 창고만 조회
_log('비활성 창고 조회 중...');
final inactiveWarehouses = await warehouseService.getWarehouseLocations(
final inactiveWarehousesResult = await warehouseService.getWarehouseLocations(
page: 1,
perPage: 10,
isActive: false,
);
_log('비활성 창고: ${inactiveWarehouses.length}');
final inactiveWarehouses = inactiveWarehousesResult.items;
_log('비활성 창고: ${inactiveWarehouses.items.length}');
testContext.setData('activeWarehouses', activeWarehouses);
testContext.setData('inactiveWarehouses', inactiveWarehouses);
@@ -850,7 +856,7 @@ extension on WarehouseAutomatedTest {
);
// expect(diagnosis.errorType, equals(ErrorType.missingRequiredField));
_log('진단 결과: ${diagnosis.missingFields?.length ?? 0}개 필드 누락');
_log('진단 결과: ${diagnosis.missingFields?.items.length ?? 0}개 필드 누락');
// 자동 수정
final fixResult = await autoFixer.attemptAutoFix(diagnosis);
@@ -897,7 +903,7 @@ extension on WarehouseAutomatedTest {
// 1. 창고별 장비 목록 조회 (초기 상태)
_log('창고별 장비 목록 조회 중...');
final initialEquipment = await warehouseService.getWarehouseEquipment(warehouse.id);
_log('초기 장비 수: ${initialEquipment.length}');
_log('초기 장비 수: ${initialEquipment.items.length}');
// 2. 장비 입고 시뮬레이션 (실제로는 Equipment 서비스를 통해 수행)
_log('장비 입고 프로세스는 Equipment 서비스에서 처리됩니다');
@@ -905,17 +911,17 @@ extension on WarehouseAutomatedTest {
// 3. 사용 중인 창고 목록 조회
_log('사용 중인 창고 목록 조회 중...');
final inUseWarehouses = await warehouseService.getInUseWarehouseLocations();
_log('사용 중인 창고 수: ${inUseWarehouses.length}');
_log('사용 중인 창고 수: ${inUseWarehouses.items.length}');
// 장비가 있는 창고는 사용 중으로 표시되어야 함
if (initialEquipment.isNotEmpty) {
final isInUse = inUseWarehouses.any((w) => w.id == warehouse.id);
if (initialEquipment.items.isNotEmpty) {
final isInUse = inUseWarehouses.items.any((w) => w.id == warehouse.id);
// expect(isInUse, isTrue, reason: '장비가 있는 창고가 사용 중으로 표시되지 않았습니다');
}
testContext.setData('equipmentIntegrationSuccess', true);
testContext.setData('initialEquipmentCount', initialEquipment.length);
testContext.setData('inUseWarehouseCount', inUseWarehouses.length);
testContext.setData('initialEquipmentCount', initialEquipment.items.length);
testContext.setData('inUseWarehouseCount', inUseWarehouses.items.length);
} catch (e) {
_log('장비 연동 중 오류 발생: $e');
@@ -946,7 +952,7 @@ extension on WarehouseAutomatedTest {
page: 1,
perPage: 100,
);
_log('전체 창고 수: ${allWarehouses.length}');
_log('전체 창고 수: ${allWarehouses.items.length}');
// 2. 활성 창고만 필터링
_log('활성 창고만 필터링...');
@@ -955,7 +961,7 @@ extension on WarehouseAutomatedTest {
perPage: 100,
isActive: true,
);
_log('활성 창고 수: ${activeWarehouses.length}');
_log('활성 창고 수: ${activeWarehouses.items.length}');
// 3. 비활성 창고 필터링
_log('비활성 창고 필터링...');
@@ -964,21 +970,21 @@ extension on WarehouseAutomatedTest {
perPage: 100,
isActive: false,
);
_log('비활성 창고 수: ${inactiveWarehouses.length}');
_log('비활성 창고 수: ${inactiveWarehouses.items.length}');
// 4. 사용 중인 창고 목록
_log('사용 중인 창고 목록 조회...');
final inUseWarehouses = await warehouseService.getInUseWarehouseLocations();
_log('사용 중인 창고 수: ${inUseWarehouses.length}');
_log('사용 중인 창고 수: ${inUseWarehouses.items.length}');
// 검증: 활성 + 비활성 = 전체 (대략적으로)
// 페이지네이션 때문에 정확히 일치하지 않을 수 있음
testContext.setData('inUseManagementSuccess', true);
testContext.setData('totalWarehouses', allWarehouses.length);
testContext.setData('activeWarehouses', activeWarehouses.length);
testContext.setData('inactiveWarehouses', inactiveWarehouses.length);
testContext.setData('inUseWarehouses', inUseWarehouses.length);
testContext.setData('totalWarehouses', allWarehouses.items.length);
testContext.setData('activeWarehouses', activeWarehouses.items.length);
testContext.setData('inactiveWarehouses', inactiveWarehouses.items.length);
testContext.setData('inUseWarehouses', inUseWarehouses.items.length);
} catch (e) {
_log('사용 중인 창고 관리 중 오류 발생: $e');
@@ -1017,7 +1023,8 @@ extension WarehouseServiceExtension on WarehouseService {
}) async {
// 실제 검색 API가 있다면 사용
// 없다면 전체 목록을 가져와서 필터링
final all = await getWarehouseLocations(page: page, perPage: perPage * 5);
final allResult = await getWarehouseLocations(page: page, perPage: perPage * 5);
final all = allResult.items;
return all.where((w) =>
w.name.toLowerCase().contains(keyword.toLowerCase()) ||
(w.address.toString().toLowerCase().contains(keyword.toLowerCase()))