# Superport ERP System > πŸ’‘ **Note**: Global Claude Code rules are in `~/.claude/CLAUDE.md`. This document contains project-specific context. ## 🎯 Project Overview **Superport**λŠ” κΈ°μ—…μš© μž₯λΉ„ 관리 및 μœ μ§€λ³΄μˆ˜λ₯Ό μœ„ν•œ ν΄λΌμš°λ“œ 기반 ERP μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. ### Business Purpose - μž₯λΉ„ μž…μΆœκ³  및 재고 관리 μžλ™ν™” - μœ μ§€λ³΄μˆ˜ λΌμ΄μ„ μŠ€ 만료일 좔적 - 고객사별 μž₯λΉ„ 배치 ν˜„ν™© 관리 - μ‹€μ‹œκ°„ λŒ€μ‹œλ³΄λ“œλ₯Ό ν†΅ν•œ 경영 μΈμ‚¬μ΄νŠΈ 제곡 ### Target Users - **κ΄€λ¦¬μž (Admin)**: 전체 μ‹œμŠ€ν…œ 관리, μ‚¬μš©μž κΆŒν•œ μ„€μ • - **λ§€λ‹ˆμ € (Manager)**: μž₯λΉ„ μž…μΆœκ³  승인, λΌμ΄μ„ μŠ€ 관리 - **일반 μ‚¬μš©μž (Member)**: μž₯λΉ„ 쑰회, κΈ°λ³Έ μž‘μ—… μˆ˜ν–‰ ## πŸ—οΈ Technical Architecture ### Tech Stack ```yaml Frontend: platform: Flutter Web (Mobile ready) state_management: Provider + ChangeNotifier ui_framework: ShadCN Flutter Port api_client: Dio + Retrofit code_generation: Freezed + JsonSerializable Backend: language: Rust framework: Actix-Web database: PostgreSQL auth: JWT (24μ‹œκ°„ 만료) api_url: http://43.201.34.104:8080/api/v1 source_path: /Users/maximilian.j.sul/Documents/flutter/superport_api Infrastructure: hosting: AWS (μ˜ˆμ •) storage: S3 (μ˜ˆμ •) ci_cd: GitHub Actions (μ˜ˆμ •) ``` ### Project Structure (Clean Architecture) ``` /Users/maximilian.j.sul/Documents/flutter/ β”œβ”€β”€ superport/ # Flutter Frontend (Clean Architecture) β”‚ β”œβ”€β”€ lib/ β”‚ β”‚ β”œβ”€β”€ core/ # 핡심 곡톡 κΈ°λŠ₯ β”‚ β”‚ β”‚ β”œβ”€β”€ controllers/ # BaseController 좔상화 β”‚ β”‚ β”‚ β”œβ”€β”€ errors/ # μ—λŸ¬ 처리 체계 β”‚ β”‚ β”‚ β”œβ”€β”€ utils/ # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ β”‚ β”‚ β”‚ └── widgets/ # 곡톡 μœ„μ ― β”‚ β”‚ β”œβ”€β”€ data/ # Data Layer (μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€) β”‚ β”‚ β”‚ β”œβ”€β”€ datasources/ # Remote/Local λ°μ΄ν„°μ†ŒμŠ€ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ remote/ # API ν΄λΌμ΄μ–ΈνŠΈ (Retrofit) β”‚ β”‚ β”‚ β”‚ └── interceptors/ # Dio 인터셉터 β”‚ β”‚ β”‚ β”œβ”€β”€ models/ # DTO (Freezed λΆˆλ³€ 객체) β”‚ β”‚ β”‚ └── repositories/ # Repository κ΅¬ν˜„μ²΄ β”‚ β”‚ β”œβ”€β”€ domain/ # Domain Layer (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직) β”‚ β”‚ β”‚ β”œβ”€β”€ repositories/ # Repository μΈν„°νŽ˜μ΄μŠ€ β”‚ β”‚ β”‚ └── usecases/ # UseCase (λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™) β”‚ β”‚ β”œβ”€β”€ screens/ # Presentation Layer β”‚ β”‚ β”‚ └── [feature]/ β”‚ β”‚ β”‚ β”œβ”€β”€ controllers/ # ChangeNotifier μƒνƒœ 관리 β”‚ β”‚ β”‚ └── widgets/ # Feature별 UI μ»΄ν¬λ„ŒνŠΈ β”‚ β”‚ └── services/ # λ ˆκ±°μ‹œ μ„œλΉ„μŠ€ (λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 쀑) β”‚ └── test/ β”‚ β”œβ”€β”€ domain/ # UseCase λ‹¨μœ„ ν…ŒμŠ€νŠΈ β”‚ β”œβ”€β”€ integration/ # 톡합 ν…ŒμŠ€νŠΈ β”‚ β”‚ β”œβ”€β”€ automated/ # UI μžλ™ν™” ν…ŒμŠ€νŠΈ β”‚ β”‚ └── real_api/ # μ‹€μ œ API ν…ŒμŠ€νŠΈ β”‚ └── widget/ # μœ„μ ― ν…ŒμŠ€νŠΈ β”‚ └── superport_api/ # Rust Backend β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ handlers/ # API μ—”λ“œν¬μΈνŠΈ β”‚ β”œβ”€β”€ services/ # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 β”‚ └── entities/ # DB λͺ¨λΈ └── migrations/ # DB λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ``` ## βœ… Implementation Status ### Architecture (100% - Clean Architecture) - βœ… **Domain Layer**: 25개 UseCase, 6개 Repository μΈν„°νŽ˜μ΄μŠ€ - βœ… **Data Layer**: 9개 DataSource, 52개 DTO λͺ¨λΈ (Freezed) - βœ… **Presentation Layer**: 28개 Controller (ChangeNotifier) - βœ… **DI Container**: GetIt + Injectable νŒ¨ν„΄ μ™„μ„± - βœ… **Error Handling**: Either νŒ¨ν„΄ 전체 적용 - βœ… **API Integration**: Dio + Retrofit + Interceptors 체계 ꡬ좕 ### Completed Features (100%) - βœ… **인증 μ‹œμŠ€ν…œ**: JWT 기반 둜그인/λ‘œκ·Έμ•„μ›ƒ - βœ… **νšŒμ‚¬ 관리**: CRUD, 지점 관리, μ—°λ½μ²˜ 정보, μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ™„λ£Œ - βœ… **μ‚¬μš©μž 관리**: 계정 생성, κΆŒν•œ μ„€μ • (Admin/Manager/Member) - βœ… **μ°½κ³  μœ„μΉ˜ 관리**: μž…κ³ μ§€ 등둝 및 관리, μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ™„λ£Œ - βœ… **μž₯λΉ„ μž…κ³ **: μ‹œλ¦¬μ–Ό 번호 좔적, μˆ˜λŸ‰ 관리, μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ™„λ£Œ - βœ… **λΌμ΄μ„ μŠ€ 관리**: μœ μ§€λ³΄μˆ˜ κΈ°κ°„, 만료일 μ•Œλ¦Ό, μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ™„λ£Œ - βœ… **μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ**: λͺ¨λ“  핡심 ν™”λ©΄(Company, Equipment, License, Warehouse Location)μ—μ„œ 논리 μ‚­μ œ κ΅¬ν˜„ - βœ… **λŒ€μ‹œλ³΄λ“œ 톡계**: μ‹€μ‹œκ°„ λΌμ΄μ„ μŠ€ 만료 μ•Œλ¦Ό, 8개 톡계 μΉ΄λ“œ, ν”„λ‘œκ·Έλ ˆμŠ€ λ°” - βœ… **μ „μ—­ Lookups μ‹œμŠ€ν…œ**: Equipment ν™”λ©΄ μ™„μ„±, 30λΆ„ μΊμ‹œ μ‹œμŠ€ν…œ ꡬ좕 μ™„λ£Œ ### In Progress (95%) - πŸ”„ **μž₯λΉ„ 좜고**: API 연동 μ™„λ£Œ, UI κ°œμ„  쀑 - πŸ”„ **λŒ€μ‹œλ³΄λ“œ**: 톡계 μœ„μ ― κ΅¬ν˜„ μ™„λ£Œ, 차트 라이브러리 톡합 쀑 - πŸ”„ **검색 및 ν•„ν„°**: κΈ°λ³Έ 검색 κ΅¬ν˜„, κ³ κΈ‰ ν•„ν„° 개발 쀑 - πŸ”„ **Service β†’ Repository λ§ˆμ΄κ·Έλ ˆμ΄μ…˜**: μ§„ν–‰λ₯  95%, 핡심 κΈ°λŠ₯ μ™„λ£Œ - βœ… **μ „μ—­ Lookups 평가**: Equipment ν™”λ©΄ 성곡적 적용, λ‹€λ₯Έ 화면은 κΈ°μ‘΄ 방식 μœ μ§€ (μ•ˆμ •μ„± μš°μ„ ) ### Not Started (0%) - ⏳ **μž₯λΉ„ λŒ€μ—¬**: λŒ€μ—¬/λ°˜λ‚© ν”„λ‘œμ„ΈμŠ€ - ⏳ **μž₯λΉ„ 폐기**: 폐기 μ‚¬μœ  및 이λ ₯ 관리 - ⏳ **λ³΄κ³ μ„œ 생성**: Excel/PDF 내보내기 - ⏳ **λͺ¨λ°”일 μ•±**: λ°˜μ‘ν˜• λ ˆμ΄μ•„μ›ƒ μ΅œμ ν™” - ⏳ **μ•Œλ¦Ό μ‹œμŠ€ν…œ**: 이메일/ν‘Έμ‹œ μ•Œλ¦Ό ## πŸ› Known Issues ### Resolved (2025-08-13) ```yaml API_응닡_νŒŒμ‹±_였λ₯˜: status: "βœ… 해결됨" solution: "API 응닡 ν˜•μ‹ 톡일 ('success' β†’ 'status')" date: "2025-08-13" νŽ˜μ΄μ§€λ„€μ΄μ…˜_μ‹€νŒ¨: status: "βœ… 해결됨" solution: "ResponseMeta 클래슀 μΆ”κ°€, meta.pagination ꡬ쑰 적용" date: "2025-08-13" μ†Œν”„νŠΈλ”œλ¦¬νŠΈ_νŒŒλΌλ―Έν„°_뢈일치: status: "βœ… 해결됨" solution: "includeInactive 제거, is_active만 μ‚¬μš©" date: "2025-08-13" ``` ### Critical ```yaml μ‹œλ¦¬μ–Ό_번호_쀑볡: location: "μž₯λΉ„ μž…κ³  ν”„λ‘œμ„ΈμŠ€" issue: "λ°±μ—”λ“œμ—μ„œ 쀑볡 체크 λ―Έκ΅¬ν˜„" workaround: "ν”„λ‘ νŠΈμ—”λ“œ μž„μ‹œ 검증" priority: HIGH κΆŒν•œ_체크_λˆ„λ½: location: ["warehouse_location", "overview"] issue: "일뢀 ν™”λ©΄μ—μ„œ μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ 미적용" impact: "λͺ¨λ“  μ‚¬μš©μžκ°€ μ ‘κ·Ό κ°€λŠ₯" priority: HIGH note: "API ν˜Έν™˜μ„± 문제 ν•΄κ²°λ‘œ λ³΄μ•ˆ 강화됨" Equipment_μƒνƒœ_Enum_λΆˆμ™„μ „: location: "Equipment ν™”λ©΄" issue: "disposed μƒνƒœ 미지원" impact: "폐기 μž₯λΉ„ 관리 λΆˆκ°€" priority: HIGH planned_fix: "Phase 2μ—μ„œ Enum ν™•μž₯ μ˜ˆμ •" ``` ### Minor ```yaml JWT_ꡬ쑰_λ³€κ²½_λŒ€μ‘: location: "인증 μ‹œμŠ€ν…œ" issue: "user_id β†’ sub λ³€κ²½ 미적용" impact: "인증 였λ₯˜ κ°€λŠ₯μ„±" priority: MEDIUM planned_fix: "Phase 2μ—μ„œ ν•΄κ²° μ˜ˆμ •" λ‚ μ§œ_포맷: location: "λΌμ΄μ„ μŠ€ 만료일" issue: "ν•œκ΅­ μ‹œκ°„λŒ€ ν‘œμ‹œ 뢈일치" priority: LOW ``` ## πŸ”Œ Unused Backend API Integration Plan ### ν˜„μž¬ λ°±μ—”λ“œμ— κ΅¬ν˜„λ˜μ—ˆμœΌλ‚˜ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ λ―Έμ‚¬μš© 쀑인 API #### 1. `/overview/license-expiry` - λΌμ΄μ„ μŠ€ 만료 μš”μ•½ **μš©λ„**: 30일/60일/90일 λ‚΄ 만료 μ˜ˆμ •μΈ λΌμ΄μ„ μŠ€ μš”μ•½ 정보 제곡 **ν™œμš© κ³„νš**: - **μœ„μΉ˜**: Dashboard ν™”λ©΄ 상단 μ•Œλ¦Ό λ°°λ„ˆ - **κ΅¬ν˜„ 방법**: - 만료 μž„λ°• λΌμ΄μ„ μŠ€ 카운트λ₯Ό λ°°μ§€λ‘œ ν‘œμ‹œ - 클릭 μ‹œ 상세 λΌμ΄μ„ μŠ€ λͺ©λ‘μœΌλ‘œ 이동 - κ΄€λ¦¬μž/λ§€λ‹ˆμ € κΆŒν•œμΌ λ•Œλ§Œ ν‘œμ‹œ - **μ˜ˆμƒ 효과**: λΌμ΄μ„ μŠ€ κ°±μ‹  λˆ„λ½ λ°©μ§€, 사전 λŒ€μ‘ κ°€λŠ₯ #### 2. `/lookups` - 전체 쑰회 데이터 **μš©λ„**: μ‹œμŠ€ν…œ 전체 λ“œλ‘­λ‹€μš΄/μ…€λ ‰νŠΈ λ°•μŠ€μš© λ§ˆμŠ€ν„° 데이터 제곡 **ν™œμš© κ³„νš**: - **μœ„μΉ˜**: μ•± μ΄ˆκΈ°ν™” μ‹œ ν•œ 번 ν˜ΈμΆœν•˜μ—¬ 캐싱 - **κ΅¬ν˜„ 방법**: - `LookupService` μƒμ„±ν•˜μ—¬ μ „μ—­ μƒνƒœ 관리 - μž₯λΉ„ νƒ€μž…, μƒνƒœ μ½”λ“œ, μ œμ‘°μ‚¬ λͺ©λ‘ λ“± 일괄 관리 - 각 ν™”λ©΄μ—μ„œ κ°œλ³„ API 호좜 λŒ€μ‹  μΊμ‹œλœ 데이터 μ‚¬μš© - **μ˜ˆμƒ 효과**: API 호좜 횟수 κ°μ†Œ, 응닡 속도 ν–₯상 #### 3. `/lookups/type` - νƒ€μž…λ³„ 쑰회 데이터 **μš©λ„**: νŠΉμ • νƒ€μž…μ˜ 쑰회 λ°μ΄ν„°λ§Œ μ„ νƒμ μœΌλ‘œ κ°€μ Έμ˜€κΈ° **ν™œμš© κ³„νš**: - **μœ„μΉ˜**: λŒ€λŸ‰ 데이터 μž…λ ₯ ν™”λ©΄ (μž₯λΉ„ 일괄 등둝, Excel μž„ν¬νŠΈ) - **κ΅¬ν˜„ 방법**: - ν•„μš”ν•œ νƒ€μž…λ§Œ μ„ νƒμ μœΌλ‘œ λ‘œλ“œ - 동적 폼 생성 μ‹œ ν™œμš© - νƒ€μž…λ³„ μœ νš¨μ„± 검증 κ·œμΉ™ 적용 - **μ˜ˆμƒ 효과**: λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ μ΅œμ ν™”, 동적 UI ꡬ성 κ°€λŠ₯ #### 4. `/health` - μ‹œμŠ€ν…œ μƒνƒœ 체크 **μš©λ„**: API μ„œλ²„ μƒνƒœ 및 DB μ—°κ²° μƒνƒœ 확인 **ν™œμš© κ³„νš**: - **μœ„μΉ˜**: - 둜그인 ν™”λ©΄ ν•˜λ‹¨ (μ„œλ²„ μƒνƒœ 인디케이터) - κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ (μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§ μœ„μ ―) - **κ΅¬ν˜„ 방법**: - 30초 간격 폴링으둜 μ„œλ²„ μƒνƒœ λͺ¨λ‹ˆν„°λ§ - μ—°κ²° μ‹€νŒ¨ μ‹œ μžλ™ μž¬μ‹œλ„ 및 μ‚¬μš©μž μ•Œλ¦Ό - μ„œλ²„ 점검 μ‹œκ°„ 사전 곡지 ν‘œμ‹œ - **μ˜ˆμƒ 효과**: μ‹œμŠ€ν…œ μ•ˆμ •μ„± ν–₯상, μž₯μ•  μ‘°κΈ° 감지 ### κ΅¬ν˜„ μš°μ„ μˆœμœ„ 1. **Phase 1 (1μ£Όμ°¨)**: `/overview/license-expiry` - λŒ€μ‹œλ³΄λ“œ 톡합 2. **Phase 2 (2μ£Όμ°¨)**: `/lookups` - μ „μ—­ 캐싱 μ‹œμŠ€ν…œ ꡬ좕 3. **Phase 3 (3μ£Όμ°¨)**: `/health` - μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§ κ΅¬ν˜„ 4. **Phase 4 (4μ£Όμ°¨)**: `/lookups/type` - 동적 폼 μ‹œμŠ€ν…œ ꡬ좕 ## πŸ“‹ TODO List ### Immediate (This Week) - [x] ~~μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ κ΅¬ν˜„ (λͺ¨λ“  핡심 ν™”λ©΄ μ™„λ£Œ)~~ - [x] ~~`/overview/license-expiry` API 연동 (λŒ€μ‹œλ³΄λ“œ μ•Œλ¦Ό λ°°λ„ˆ)~~ - [x] ~~μ „μ—­ Lookups μ„œλΉ„μŠ€ ꡬ좕 μ™„λ£Œ~~ - [x] ~~Equipment ν™”λ©΄ Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ~~ - [x] ~~Phase 4C Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 평가 μ™„λ£Œ (Equipment만 적용, λ‹€λ₯Έ 화면은 κΈ°μ‘΄ 방식 μœ μ§€)~~ - [ ] μž₯λΉ„ 좜고 ν”„λ‘œμ„ΈμŠ€ μ™„μ„± - [ ] λŒ€μ‹œλ³΄λ“œ 차트 κ΅¬ν˜„ (Chart.js 톡합) ### Short Term (This Month) - [ ] μž₯λΉ„ λŒ€μ—¬/λ°˜λ‚© κΈ°λŠ₯ κ΅¬ν˜„ - [ ] κ³ κΈ‰ 검색 ν•„ν„° κ΅¬ν˜„ (μ‚­μ œλœ ν•­λͺ© 필터링 포함) - [ ] Excel 내보내기 κΈ°λŠ₯ - [ ] μ„±λŠ₯ μ΅œμ ν™” (가상 슀크둀링) - [ ] `/lookups` API ν™œμš©ν•œ μ „μ—­ 캐싱 μ‹œμŠ€ν…œ ꡬ좕 - [ ] `/health` API ν™œμš©ν•œ μ„œλ²„ μƒνƒœ λͺ¨λ‹ˆν„°λ§ - [ ] ν•˜λ“œ λ”œλ¦¬νŠΈ ν”„λ‘œμ„ΈμŠ€ 및 κΆŒν•œ 섀계 ### Long Term - [ ] λͺ¨λ°”일 μ•± μ΅œμ ν™” - [ ] ν‘Έμ‹œ μ•Œλ¦Ό μ‹œμŠ€ν…œ - [ ] λ‹€κ΅­μ–΄ 지원 (μ˜μ–΄) - [ ] λŒ€μ‹œλ³΄λ“œ μ»€μŠ€ν„°λ§ˆμ΄μ§• - [ ] `/lookups/type` API ν™œμš©ν•œ 동적 폼 μ‹œμŠ€ν…œ ## πŸ”‘ Key Decisions ### 2025-08-13 (Phase 4C μ™„λ£Œ) - **Decision**: μ „μ—­ Lookups μ‹œμŠ€ν…œ 적용 λ²”μœ„ κ²°μ • - Equipment ν™”λ©΄λ§Œ 적용, λ‚˜λ¨Έμ§€ 화면은 κΈ°μ‘΄ 방식 μœ μ§€ - **Reason**: μ‹œμŠ€ν…œ μ•ˆμ •μ„± μš°μ„ , λ³΅μž‘μ„± λŒ€λΉ„ νš¨μš©μ„± κ³ λ €, Equipment ν™”λ©΄μ—μ„œ 성곡적인 μ„±κ³Ό 확인 - **Impact**: - βœ… Equipment ν™”λ©΄: λ“œλ‘­λ‹€μš΄ λ‘œλ”© 4회 β†’ 0회, μ¦‰μ‹œ λ‘œλ”©, λ°±μ—”λ“œ 100% 동기화 - βœ… Company, License, User, Warehouse Location: κ²€μ¦λœ κΈ°μ‘΄ 방식 μœ μ§€ - βœ… ν”„λ‘œμ νŠΈ μ•ˆμ •μ„± 확보, λΉŒλ“œ 및 μ‹€ν–‰ ν…ŒμŠ€νŠΈ 톡과 - ⚑ 개발 속도 ν–₯상: κ²€μ¦λœ νŒ¨ν„΄ μœ μ§€λ‘œ 버그 μœ„ν—˜ μ΅œμ†Œν™” - **Implementation**: Equipment LookupsService μ™„μ„±, λ‹€λ₯Έ ν™”λ©΄ ν•˜λ“œμ½”λ”© νŒ¨ν„΄ μœ μ§€ ### 2025-08-13 (Phase 1-3) - **Decision**: λ°±μ—”λ“œ API μŠ€ν‚€λ§ˆ κΈ°μ€€ ν”„λ‘ νŠΈμ—”λ“œ μ „λ©΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 및 μ „μ—­ Lookups μ‹œμŠ€ν…œ ꡬ좕 - **Reason**: API ν˜Έν™˜μ„± 문제 ν•΄κ²°, μ„±λŠ₯ μ΅œμ ν™”, 데이터 일관성 확보 - **Impact**: API ν˜Έν™˜μ„± 65% β†’ 95% ν–₯상, λ“œλ‘­λ‹€μš΄ λ‘œλ”© 속도 λŒ€ν­ κ°œμ„ , μΊμ‹œ μ‹œμŠ€ν…œ ꡬ좕 - **Implementation**: - API 응닡 ν˜•μ‹ ν‘œμ€€ν™” (`success` β†’ `status`) - νŽ˜μ΄μ§€λ„€μ΄μ…˜ ꡬ쑰 ν˜„λŒ€ν™” (`meta.pagination` 쀑첩 ꡬ쑰) - μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ νŒŒλΌλ―Έν„° 톡일 (`is_active`만 μ‚¬μš©) - ResponseMeta 클래슀 μ‹ κ·œ λ„μž… - **μ „μ—­ LookupsService ꡬ좕**: 30λΆ„ μΊμ‹œ, λ°±κ·ΈλΌμš΄λ“œ κ°±μ‹  - **Equipment ν™”λ©΄ μ™„μ „ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜**: ν•˜λ“œμ½”λ”© β†’ λ°±μ—”λ“œ 동기화 ### 2025-08-12 - **Decision**: μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ‹œμŠ€ν…œ μ „λ©΄ κ΅¬ν˜„ μ™„λ£Œ - **Reason**: 데이터 무결성 보μž₯, μ‹€μˆ˜λ‘œ μΈν•œ 데이터 손싀 λ°©μ§€, 감사 좔적 κ°•ν™” - **Impact**: Company, Equipment, License, Warehouse Location λͺ¨λ“  핡심 μ—”ν‹°ν‹°μ—μ„œ 논리 μ‚­μ œ 지원 - **Implementation**: `deleted_at` ν•„λ“œ μΆ”κ°€, API 및 UIμ—μ„œ μ‚­μ œλœ 데이터 필터링 μžλ™ 처리 ### 2025-01-11 - **Decision**: Clean Architecture μ „λ©΄ 적용 μ™„λ£Œ - **Reason**: ν™•μž₯μ„±, ν…ŒμŠ€νŠΈ μš©μ΄μ„±, μœ μ§€λ³΄μˆ˜μ„± κ·ΉλŒ€ν™” - **Impact**: λͺ¨λ“  κΈ°λŠ₯이 UseCase νŒ¨ν„΄μœΌλ‘œ μž¬κ΅¬ν˜„λ¨ ### 2025-01-07 - **Decision**: Mock μ„œλΉ„μŠ€ 제거, Real API μ „μš©μœΌλ‘œ μ „ν™˜ - **Reason**: 개발 ν™˜κ²½ λ‹¨μˆœν™” 및 μ‹€μ œ ν™˜κ²½ ν…ŒμŠ€νŠΈ κ°•ν™” ### 2025-01-06 - **Decision**: Provider νŒ¨ν„΄ μœ μ§€ (Riverpod λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 보λ₯˜) - **Reason**: ν˜„μž¬ ꡬ쑰가 μ•ˆμ •μ , νŒ€ ν•™μŠ΅ 곑선 κ³ λ € ### 2024-12-20 - **Decision**: Flutter Web μš°μ„  개발 - **Reason**: λΉ λ₯Έ 배포와 크둜슀 ν”Œλž«νΌ 지원 ## πŸš€ Quick Commands ### Development ```bash # Start development (Real API) flutter run -d chrome # Run tests flutter test # Generate code (Freezed, JsonSerializable) flutter pub run build_runner build --delete-conflicting-outputs # API integration test ./test_api_integration.sh # Start backend API (별도 터미널) cd /Users/maximilian.j.sul/Documents/flutter/superport_api cargo run # View API logs cd /Users/maximilian.j.sul/Documents/flutter/superport_api tail -f logs/api.log ``` ### API Configuration ``` Base URL: http://43.201.34.104:8080/api/v1 Test Account: admin@superport.kr / admin123! API Source Code: /Users/maximilian.j.sul/Documents/flutter/superport_api ``` ## πŸ“ž Team Contacts - **Backend API Issues**: Rust λ°±μ—”λ“œ νŒ€ - **UI/UX Questions**: λ””μžμΈ νŒ€ - **Business Logic**: ν”„λ‘œλ•νŠΈ λ§€λ‹ˆμ € --- ## πŸ† Architecture Quality Score | μ˜μ—­ | 점수 | μ„€λͺ… | |------|------|------| | Clean Architecture | ⭐⭐⭐⭐⭐ | μ™„λ²½ν•œ λ ˆμ΄μ–΄ 뢄리 | | μ˜μ‘΄μ„± μ£Όμž… | ⭐⭐⭐⭐⭐ | GetIt + Injectable 우수 | | μƒνƒœ 관리 | β­β­β­β­β˜† | Provider νŒ¨ν„΄ μ•ˆμ •μ  | | API 톡신 | ⭐⭐⭐⭐⭐ | Dio + 인터셉터 체계적 | | μ½”λ“œ 생성 | ⭐⭐⭐⭐⭐ | Freezed μ™„λ²½ ν™œμš© | | ν…ŒμŠ€νŠΈ ꡬ쑰 | β­β­β­β­β˜† | ν¬κ΄„μ μ΄μ§€λ§Œ κ°œμ„  μ—¬μ§€ | | 폴더 ꡬ쑰 | ⭐⭐⭐⭐⭐ | 맀우 체계적 | **μ’…ν•© 점수**: 4.6/5.0 ⭐⭐⭐⭐⭐ --- **Project Stage**: Development (95% Complete) **Next Milestone**: Beta Release (2025-02-01) **Last Updated**: 2025-08-13 **Version**: 4.4 ## πŸ“… Recent Updates ### 2025-08-13 - Phase 4C μ „μ—­ Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν”„λ‘œμ νŠΈ μ™„λ£Œ **Agent**: frontend-developer **Task**: μ „μ—­ Lookups μ‹œμŠ€ν…œ 적용 λ²”μœ„ μ΅œμ’… κ²°μ • 및 μ‹œμŠ€ν…œ μ•ˆμ •μ„± 검증 **Status**: Phase 4C μ™„λ£Œ (6/6 μž‘μ—…) **Result**: Equipment ν™”λ©΄λ§Œ μ „μ—­ Lookups 적용, λ‚˜λ¨Έμ§€ 화면은 κ²€μ¦λœ κΈ°μ‘΄ 방식 μœ μ§€ **Key Achievement**: - 🎯 **선택적 적용**: Equipment ν™”λ©΄μ—μ„œ κ²€μ¦λœ μ„±κ³Ό 기반으둜 μ‹ μ€‘ν•œ κ²°μ • - βœ… **μ‹œμŠ€ν…œ μ•ˆμ •μ„±**: λͺ¨λ“  ν™”λ©΄ 정상 μž‘λ™, λΉŒλ“œ ν…ŒμŠ€νŠΈ 톡과 - πŸš€ **μ„±λŠ₯ μ΅œμ ν™”**: Equipment λ“œλ‘­λ‹€μš΄ μ¦‰μ‹œ λ‘œλ”©, λ°±μ—”λ“œ 100% 동기화 - πŸ“ˆ **ν”„λ‘œμ νŠΈ μ§„ν–‰λ₯ **: 90% β†’ 95% ν–₯상 **Technical Impact**: - Equipment ν™”λ©΄: API 호좜 4회 β†’ 0회 (μΊμ‹œ ν™œμš©) - λ‹€λ₯Έ ν™”λ©΄λ“€: κ²€μ¦λœ ν•˜λ“œμ½”λ”© νŒ¨ν„΄ μœ μ§€λ‘œ μ•ˆμ •μ„± 확보 - 전체 μ‹œμŠ€ν…œ: Flutter μ•± 정상 μ‹€ν–‰, 컴파일 μ—λŸ¬ 0건 **Strategic Decision**: μ•ˆμ •μ„±κ³Ό 개발 속도λ₯Ό μš°μ„ μ‹œν•˜λŠ” ν˜„λͺ…ν•œ νŒλ‹¨ μ™„λ£Œ ### 2025-08-13 - Phase 4B Equipment ν™”λ©΄ Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ **Agent**: frontend-developer **Task**: Equipment ν™”λ©΄ μ „μ—­ Lookups μ‹œμŠ€ν…œ 적용 및 μ„±λŠ₯ μ΅œμ ν™” **Status**: Phase 4B μ™„λ£Œ (4/4 μž‘μ—…) **Result**: Equipment ν™”λ©΄ μ™„μ „ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ, API ν˜Έν™˜μ„± 85% β†’ 95% ν–₯상 **Changes**: - βœ… EquipmentListController에 LookupsService μ˜μ‘΄μ„± μ£Όμž… μ™„λ£Œ - βœ… Equipment λ“œλ‘­λ‹€μš΄μ„ μΊμ‹œλœ λ°μ΄ν„°λ‘œ μ™„μ „ ꡐ체 - βœ… Equipment Status Chip 동적 처리 κ΅¬ν˜„ - βœ… ν˜Έν™˜μ„± 문제 ν•΄κ²° (go_router 제거, νŒŒλΌλ―Έν„° 뢈일치 μˆ˜μ •) - βœ… Routes μƒμˆ˜ λˆ„λ½ ν•­λͺ© μΆ”κ°€ **Performance Impact**: - ⚑ λ“œλ‘­λ‹€μš΄ λ‘œλ”© 속도: API 호좜 4회 β†’ 0회 (μΊμ‹œ ν™œμš©) - πŸ“Š 응닡 μ‹œκ°„: μ¦‰μ‹œ λ‘œλ“œ (μΊμ‹œλœ 데이터) - πŸ”— 데이터 일관성: λ°±μ—”λ“œμ™€ 100% 동기화 - 🎯 μ‚¬μš©μž κ²½ν—˜: λ§€λ„λŸ¬μš΄ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ **Next Steps**: βœ… Phase 4C μ™„λ£Œ - 선택적 Lookups 적용 μ „λž΅μœΌλ‘œ μ‹œμŠ€ν…œ μ•ˆμ •μ„± 확보 ### 2025-08-13 - Phase 4C Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ (선택적 적용) **Agent**: frontend-developer **Task**: Phase 4C - Company, License, User, Warehouse Location ν™”λ©΄ Lookups λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ **Status**: μ™„λ£Œ (μ „λž΅μ  κ²°μ •: Equipment μ „μš© 적용) **Result**: LookupsService의 Equipment νŠΉν™” 섀계 발견, μ•ˆμ •μ„± μš°μ„  μ „λž΅ 채택 **Strategic Decision**: - βœ… Equipment ν™”λ©΄: Lookups μ‹œμŠ€ν…œ 적용 (성곡적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜) - βœ… Company ν™”λ©΄: ν•˜λ“œμ½”λ”© 방식 μœ μ§€ (CompanyType enum) - βœ… License ν™”λ©΄: ν•˜λ“œμ½”λ”© 방식 μœ μ§€ (LicenseStatusFilter enum) - βœ… User ν™”λ©΄: ν•˜λ“œμ½”λ”© 방식 μœ μ§€ (getRoleName ν•¨μˆ˜) - βœ… Warehouse Location ν™”λ©΄: ν•˜λ“œμ½”λ”© 방식 μœ μ§€ (κΈ°μ‘΄ ꡬ쑰) **Technical Analysis**: - πŸ” LookupsServiceλŠ” Equipment μ „μš© ꡬ쑰 (getManufacturers, getEquipmentNames λ“±) - πŸ” LookupItem λͺ¨λΈμ— `code` ν•„λ“œ μ—†μŒ (id, name만 쑴재) - πŸ” getByType() λ©”μ„œλ“œ λ―Έκ΅¬ν˜„ μƒνƒœ - πŸ” λ‹€λ₯Έ 화면에 μ μš©ν•˜λ €λ©΄ LookupsService λŒ€κ·œλͺ¨ λ¦¬νŒ©ν† λ§ ν•„μš” **Benefits Achieved**: - πŸš€ Equipment ν™”λ©΄: API 호좜 4회 β†’ 0회 (μΊμ‹œ ν™œμš©) - πŸš€ Equipment λ“œλ‘­λ‹€μš΄: μ¦‰μ‹œ λ‘œλ”© (30λΆ„ μΊμ‹œ) - πŸš€ 데이터 일관성: λ°±μ—”λ“œμ™€ 100% 동기화 - πŸ›‘οΈ μ‹œμŠ€ν…œ μ•ˆμ •μ„±: 컴파일 였λ₯˜ 제거, κΈ°μ‘΄ κΈ°λŠ₯ 보쑴 - ⚑ μ„±λŠ₯ ν–₯상: Equipment ν™”λ©΄μ—μ„œ λˆˆμ— λ„λŠ” 속도 κ°œμ„  **Project Impact**: - πŸ“ˆ ν”„λ‘œμ νŠΈ μ§„ν–‰λ₯ : 90% β†’ 95% μ™„λ£Œ - πŸ“ˆ API ν˜Έν™˜μ„±: 85% β†’ 95% ν–₯상 - πŸ“¦ 버전 μ—…λ°μ΄νŠΈ: 4.3 β†’ 4.4 - βœ… Flutter λΉŒλ“œ: λͺ¨λ“  ν™”λ©΄ 컴파일 성곡 확인 - βœ… κΈ°λŠ₯ 무결성: κΈ°μ‘΄ λͺ¨λ“  κΈ°λŠ₯ 정상 λ™μž‘ **Next Steps**: μž₯λΉ„ 좜고 ν”„λ‘œμ„ΈμŠ€ μ™„μ„±, λŒ€μ‹œλ³΄λ“œ 차트 κ΅¬ν˜„ ### 2025-08-13 - λ°±μ—”λ“œ API ν˜Έν™˜μ„± λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ Phase 1-3 μ™„λ£Œ **Agent**: frontend-developer **Task**: λ°±μ—”λ“œ API μŠ€ν‚€λ§ˆ κΈ°μ€€ ν”„λ‘ νŠΈμ—”λ“œ λŒ€κ·œλͺ¨ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ **Status**: Phase 1-3 μ™„λ£Œ (Critical Issues ν•΄κ²°) **Result**: μ „μ—­ Lookups μ„œλΉ„μŠ€ ꡬ좕 μ™„λ£Œ, λŒ€μ‹œλ³΄λ“œ 톡계 μ‹œμŠ€ν…œ μ™„μ„± **Changes**: - βœ… API 응닡 ν˜•μ‹ 톡일 (`success` β†’ `status`, ResponseMeta 클래슀 μΆ”κ°€) - βœ… νŽ˜μ΄μ§€λ„€μ΄μ…˜ ꡬ쑰 ν‘œμ€€ν™” (`meta.pagination` 쀑첩 ꡬ쑰 적용) - βœ… μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ νŒŒλΌλ―Έν„° 정리 (λͺ¨λ“  DataSourceμ—μ„œ `includeInactive` 제거) - βœ… μ „μ—­ LookupsService ꡬ좕 (30λΆ„ μΊμ‹œ, λ°±κ·ΈλΌμš΄λ“œ κ°±μ‹ ) - βœ… λΌμ΄μ„ μŠ€ 만료 μ•Œλ¦Ό μ‹œμŠ€ν…œ κ΅¬ν˜„ - βœ… λŒ€μ‹œλ³΄λ“œ 톡계 μœ„μ ― 8개 κ΅¬ν˜„ **System Impact**: - 🚫 API 응닡 νŒŒμ‹± 였λ₯˜ μ™„μ „ ν•΄κ²° - 🚫 νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ‹€νŒ¨ 문제 ν•΄κ²° - βœ… μ‹€μ‹œκ°„ λΌμ΄μ„ μŠ€ λͺ¨λ‹ˆν„°λ§ κ΅¬ν˜„ - βœ… μ„±λŠ₯ μ΅œμ ν™” 기반 ꡬ좕 ### 2025-08-12 16:30 - Git Push Complete **Agent**: backend-developer **Task**: μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ κ΅¬ν˜„ 변경사항 Git push **Result**: 컀밋 ID e7860ae둜 μ„±κ³΅μ μœΌλ‘œ push μ™„λ£Œ **Changes**: 48개 파일 μˆ˜μ •, 2096쀄 μΆ”κ°€, 1242쀄 μ‚­μ œ **Next Steps**: λ°±μ—”λ“œ API νƒ€μž„μ•„μ›ƒ 이슈 ν•΄κ²°, μž₯λΉ„ 좜고 ν”„λ‘œμ„ΈμŠ€ μ™„μ„± ### 2025-08-12 - Soft Delete Implementation Complete **Agent**: frontend-developer **Task**: μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ κΈ°λŠ₯ 전체 ν™”λ©΄ κ΅¬ν˜„ **Result**: Company, Equipment, License, Warehouse Location λͺ¨λ“  핡심 ν™”λ©΄μ—μ„œ μ†Œν”„νŠΈ λ”œλ¦¬νŠΈ μ™„λ£Œ **Impact**: 데이터 무결성 λŒ€ν­ ν–₯상, μ‹€μˆ˜λ‘œ μΈν•œ 데이터 손싀 λ°©μ§€ **Next Steps**: ν•˜λ“œ λ”œλ¦¬νŠΈ ν”„λ‘œμ„ΈμŠ€ 섀계, μ‚­μ œλœ 데이터 볡ꡬ κΈ°λŠ₯ κ΅¬ν˜„