Files
superport/CLAUDE.md
JiWoong Sul c8dd1ff815
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled
refactor: 프로젝트 구조 개선 및 테스트 시스템 강화
주요 변경사항:
- CLAUDE.md: 프로젝트 규칙 v2.0으로 업데이트, 아키텍처 명확화
- 불필요한 문서 제거: NEXT_TASKS.md, TEST_PROGRESS.md, test_results 파일들
- 테스트 시스템 개선: 실제 API 테스트 스위트 추가 (15개 새 테스트 파일)
- License 관리: DTO 모델 개선, API 응답 처리 최적화
- 에러 처리: Interceptor 로직 강화, 상세 로깅 추가
- Company/User/Warehouse 테스트: 자동화 테스트 안정성 향상
- Phone Utils: 전화번호 포맷팅 로직 개선
- Overview Controller: 대시보드 데이터 로딩 최적화
- Analysis Options: Flutter 린트 규칙 추가

테스트 개선:
- company_real_api_test.dart: 실제 API 회사 관리 테스트
- equipment_in/out_real_api_test.dart: 장비 입출고 API 테스트
- license_real_api_test.dart: 라이선스 관리 API 테스트
- user_real_api_test.dart: 사용자 관리 API 테스트
- warehouse_location_real_api_test.dart: 창고 위치 API 테스트
- filter_sort_test.dart: 필터링/정렬 기능 테스트
- pagination_test.dart: 페이지네이션 테스트
- interactive_search_test.dart: 검색 기능 테스트
- overview_dashboard_test.dart: 대시보드 통합 테스트

코드 품질:
- 모든 서비스에 에러 처리 강화
- DTO 모델 null safety 개선
- 테스트 커버리지 확대
- 불필요한 로그 파일 제거로 리포지토리 정리

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-07 17:16:30 +09:00

9.2 KiB

Superport ERP System - Project Rules v2.0

💡 Note: Global Claude Code rules from ~/.claude/CLAUDE.md are automatically applied. This document contains project-specific configurations only.

🎯 Project Identity

Superport는 Rust 백엔드 + Flutter 웹/모바일 기반의 엔터프라이즈 ERP 시스템입니다.

Core Domains

  • Equipment Management: 장비 입고/출고, 시리얼 번호 추적, 재고 관리
  • Company Management: 고객사 정보, 다중 지점 관리
  • User Management: 역할 기반 접근 제어 (S: 관리자, M: 멤버)
  • License Management: 유지보수 라이선스, 만료일 추적
  • Warehouse Management: 창고 위치 체계적 관리

🏗️ Architecture Rules

Clean Architecture Structure

lib/
├── core/               # ⚠️ 핵심 설정 - 신중히 수정
│   ├── api_client.dart     # Dio/Retrofit 설정
│   ├── exceptions.dart     # 전역 예외 처리
│   └── navigation.dart     # 라우팅 관리
├── data/               # 데이터 레이어
│   ├── dto/                # API 응답 모델 (Freezed)
│   ├── repositories/       # 데이터 소스 추상화
│   └── services/          # API 서비스 (Retrofit)
├── domain/             # 비즈니스 로직
│   ├── entities/          # 도메인 모델
│   ├── repositories/      # Repository 인터페이스
│   └── usecases/         # 비즈니스 로직
├── services/           # 애플리케이션 서비스
│   ├── auth_service.dart  # JWT 인증 관리
│   ├── api_service.dart   # API 호출 관리
│   └── storage_service.dart # 로컬 저장소
├── screens/            # Feature-First UI
│   └── [feature]/
│       ├── controllers/   # Provider 기반 상태 관리
│       ├── widgets/       # 재사용 컴포넌트
│       └── [feature]_form.dart
└── di/                 # GetIt 의존성 주입

Architecture Constraints

constraints:
  - "Controller는 반드시 ChangeNotifier 상속"
  - "모든 API 호출은 ApiService 경유"
  - "DTO는 Freezed + JsonSerializable 필수"
  - "화면별 Controller 분리 원칙"
  - "Mock과 Real 서비스 완전 분리"

💻 Development Environment

API Endpoints

development:
  base_url: "https://api-dev.beavercompany.co.kr"
  test_account: "admin@test.com / Test123!@#"
  jwt_expiry: 24h

production:
  base_url: "TBD"
  security: "JWT + Secure Storage"

Environment Switching

// 환경 변수 설정 (.env)
API_MODE=mock  # mock | real
BASE_URL=https://api-dev.beavercompany.co.kr

// 코드에서 환경 전환
final isMockMode = dotenv.env['API_MODE'] == 'mock';
if (isMockMode) {
  GetIt.I.registerSingleton<ApiService>(MockApiService());
} else {
  GetIt.I.registerSingleton<ApiService>(RealApiService());
}

🧪 Test Automation System

Test Infrastructure

// 모든 화면 테스트는 BaseScreenTest 상속
abstract class BaseScreenTest {
  // 자동 에러 진단 및 수정
  ApiErrorDiagnostics diagnostics;
  
  // 한국식 현실적 테스트 데이터
  TestDataGenerator generator;
  
  // 병렬 실행 제어 (최대 3개)
  SemaphoreManager semaphore;
}

Test Execution Priority

test_order:
  1: "Company Management"     # 회사 먼저 생성
  2: "User Management"        # 회사에 사용자 연결
  3: "Warehouse Location"     # 창고 위치 설정
  4: "Equipment In"          # 장비 입고
  5: "License Management"    # 라이선스 등록
  6: "Equipment Out"         # 장비 출고
  7: "Overview Dashboard"    # 통계 확인

Test Commands

# 전체 테스트 실행 (병렬)
flutter test test/master_test_suite.dart

# 특정 화면 테스트
flutter test test/screens/company/company_test.dart

# Mock 모드 테스트
API_MODE=mock flutter test

# 에러 진단 모드
flutter test --dart-define=DIAGNOSTIC_MODE=true

🎨 UI/UX Standards

Design System

base_template: "Metronic Admin Template"
component_library: "ShadCN Flutter Port"

colors:
  primary: "#5867dd"      # Metronic 기본색
  secondary: "#34bfa3"
  background: "#f7f8fa"
  error: "#fd397a"
  success: "#0abb87"

typography:
  font_family: "NotoSansKR"
  korean_support: true

layout:
  style: "Microsoft Dynamics 365"
  structure: "Header + Sidebar + Content"
  responsive: "Web First → Mobile Adaptive"

Component Patterns

// 모든 폼은 이 패턴 따르기
class EntityForm extends StatefulWidget {
  final EntityController controller;
  final FormMode mode; // create | edit | view
  
  // 필수 섹션
  Widget buildBasicInfo() {}
  Widget buildDetailInfo() {}
  Widget buildActionButtons() {}
}

// 리스트 화면 패턴
class EntityList extends StatelessWidget {
  // 필수 요소
  Widget buildSearchBar() {}
  Widget buildFilterOptions() {}
  Widget buildDataTable() {}
  Widget buildPagination() {}
}

🔌 API Integration Rules

Error Handling Strategy

// 모든 API 호출은 이 패턴 사용
try {
  final response = await apiService.call();
  return Right(response);
} on DioException catch (e) {
  // 422개 에러 패턴 자동 분석
  final diagnosis = ApiErrorDiagnostics.analyze(e);
  return Left(ApiFailure(
    code: diagnosis.code,
    message: diagnosis.userMessage, // 한국어
    technicalDetails: diagnosis.details,
  ));
}

Response Parsing Rules

// JSON 파싱 주의사항
rules:
  - "null 값 안전 처리 필수"
  - "날짜는 ISO 8601 형식"
  - "ID는 항상 String 타입"
  - "빈 배열은 [] 반환"
  - "중첩 객체는 별도 DTO 생성"

🚨 Critical Areas & Known Issues

⚠️ Current Gotchas

equipment_in:
  issue: "시리얼 번호 중복 체크 미구현"
  workaround: "프론트엔드에서 임시 검증"

license_management:
  issue: "만료일 계산 로직 불일치"
  note: "백엔드와 프론트엔드 로직 통일 필요"

user_permission:
  issue: "권한 체크 일부 화면 누락"
  affected: ["warehouse_location", "overview"]

🔥 Hot Paths (성능 주의)

critical_operations:
  - path: "Equipment List with 10000+ items"
    solution: "Virtual scrolling 구현됨"
    
  - path: "Dashboard statistics calculation"
    solution: "5분 캐싱 적용"
    
  - path: "Company branch tree loading"
    solution: "Lazy loading 필수"

📊 Current Sprint Focus

Active Development (2025-01-06)

priority_1:
  task: "Overview Dashboard 완성"
  acceptance_criteria:
    - "실시간 통계 데이터 정확성"
    - "차트 렌더링 성능 최적화"
    - "필터링 기능 구현"

priority_2:
  task: "Equipment Out 프로세스"
  blockers:
    - "출고 승인 워크플로우 미정"
    - "재고 차감 로직 검증 필요"

priority_3:
  task: "Mobile App 변환 준비"
  requirements:
    - "반응형 레이아웃 점검"
    - "터치 제스처 최적화"

🧬 Code Generation Commands

Freezed & JsonSerializable

# 단일 파일 생성
flutter pub run build_runner build --delete-conflicting-outputs

# 전체 재생성 (주의: 시간 소요)
flutter pub run build_runner build --delete-conflicting-outputs

# Watch mode (개발 중)
flutter pub run build_runner watch

Injectable (DI)

# DI 설정 재생성
flutter pub run build_runner build --delete-conflicting-outputs

🔍 Debugging Helpers

Quick Debug Commands

// API 응답 로깅
ApiService.enableLogging = true;

// Mock 데이터 확인
MockDataViewer.show(context);

// 현재 인증 상태
AuthService.debugPrintToken();

// Controller 상태 추적
controller.addListener(() => print(controller.debugState));

Performance Monitoring

// 화면 렌더링 시간 측정
Timeline.startSync('ScreenRender');
// ... rendering code
Timeline.finishSync();

// API 호출 시간 추적
final stopwatch = Stopwatch()..start();
await apiCall();
print('API took: ${stopwatch.elapsed}');

📝 Commit Message Convention

Project-Specific Prefixes

equipment: 장비 관리 관련
company: 회사 관리 관련
user: 사용자 관리 관련
license: 유지보수 라이선스 관련
warehouse: 창고 관련
dashboard: 대시보드 관련
auth: 인증/권한 관련
api: API 연동 관련

Examples

equipment: 시리얼 번호 중복 검증 로직 추가
company: 지점 트리 구조 lazy loading 구현
test: Equipment In 자동화 테스트 완성
api: 422 에러 자동 복구 메커니즘 구현

🎯 Success Metrics

Code Quality Standards

flutter_analyze:
  errors: 0
  warnings: < 10
  info: < 50

test_coverage:
  minimum: 80%
  critical_paths: 100%

performance:
  initial_load: < 3s
  api_response: < 500ms
  list_render: < 100ms

🚀 Quick Start Guide

For New Developers

# 1. 환경 설정
cp .env.example .env
flutter pub get

# 2. 코드 생성
flutter pub run build_runner build --delete-conflicting-outputs

# 3. Mock 모드로 시작
API_MODE=mock flutter run -d chrome

# 4. 테스트 실행
flutter test test/master_test_suite.dart

# 5. 실제 API 연동
API_MODE=real flutter run -d chrome

Version: 2.0
Last Updated: 2025-01-06
Project Stage: Production Ready
Next Milestone: Mobile App Release