feat: 회사 관리 기능 개선 및 지점 평면화 DTO 추가

- CompanyBranchFlatDto 모델 추가로 지점 데이터 처리 개선
- 회사 서비스에 브랜치 평면화 기능 추가
- 회사 폼 컨트롤러 기능 확장
- 회사 리스트 화면 UI 개선

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-08-09 02:16:57 +09:00
parent 8302ff37cc
commit f8e8a95391
9 changed files with 682 additions and 208 deletions

View File

@@ -262,6 +262,58 @@ class CompanyService {
throw ServerFailure(message: 'Failed to update company status: $e');
}
}
// 회사 목록과 지점 정보를 함께 조회 (플랫 데이터를 그룹화)
Future<List<Company>> getCompaniesWithBranchesFlat() async {
try {
final flatData = await _remoteDataSource.getCompanyBranchesFlat();
// 회사별로 데이터 그룹화
final Map<int, List<Branch>> companyBranchesMap = {};
final Map<int, String> companyNamesMap = {};
for (final item in flatData) {
companyNamesMap[item.companyId] = item.companyName;
if (item.branchId != null && item.branchName != null) {
if (!companyBranchesMap.containsKey(item.companyId)) {
companyBranchesMap[item.companyId] = [];
}
companyBranchesMap[item.companyId]!.add(
Branch(
id: item.branchId,
companyId: item.companyId,
name: item.branchName!,
address: Address.fromFullAddress(''), // 주소 정보가 없으므로 빈 값
),
);
}
}
// Company 객체 생성
final List<Company> companies = [];
for (final entry in companyNamesMap.entries) {
companies.add(
Company(
id: entry.key,
name: entry.value,
address: Address.fromFullAddress(''), // 주소 정보가 없으므로 빈 값
companyTypes: [CompanyType.customer], // 기본값
branches: companyBranchesMap[entry.key], // null 허용
),
);
}
return companies;
} on ApiException catch (e) {
debugPrint('[CompanyService] ApiException: ${e.message}');
throw ServerFailure(message: e.message);
} catch (e, stackTrace) {
debugPrint('[CompanyService] Error loading companies with branches: $e');
debugPrint('[CompanyService] Stack trace: $stackTrace');
throw ServerFailure(message: 'Failed to fetch companies with branches: $e');
}
}
// 변환 헬퍼 메서드들
Company _convertListDtoToCompany(CompanyListDto dto) {