feat: API 통합을 위한 기초 인프라 구축
- 네트워크 레이어 구현 (Dio 기반 ApiClient) - 환경별 설정 관리 시스템 구축 - 의존성 주입 설정 (GetIt) - API 엔드포인트 상수 정의 - 인터셉터 구현 (Auth, Error, Logging) - 프로젝트 아키텍처 개선 (core, data, di 디렉토리 구조) - API 통합 계획서 및 요구사항 문서 작성 - 필요 패키지 추가 (dio, flutter_secure_storage, get_it 등)
This commit is contained in:
335
doc/API_Additional_Implementation_Requirements.md
Normal file
335
doc/API_Additional_Implementation_Requirements.md
Normal file
@@ -0,0 +1,335 @@
|
||||
# SuperPort API 구현 현황 분석 보고서
|
||||
|
||||
> 작성일: 2025-07-24
|
||||
> 분석 범위: SuperPort 프론트엔드와 백엔드 API 전체
|
||||
> 분석 기준: 프론트엔드 컨트롤러 요구사항 대비 백엔드 API 구현 상태
|
||||
|
||||
## 📊 요약
|
||||
|
||||
- **전체 API 구현율**: 85.3%
|
||||
- **화면별 평균 구현율**: 82.9%
|
||||
- **우선 구현 필요 API 수**: 15개
|
||||
- **즉시 수정 필요 사항**: 3개 (타입 오류)
|
||||
|
||||
## 🖥️ 화면별 API 구현 현황
|
||||
|
||||
### 1. 🔐 로그인 화면
|
||||
**구현율: 100%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| POST `/api/v1/auth/login` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/auth/logout` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/auth/refresh` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/me` | ✅ | ✅ 구현됨 | 현재 사용자 정보 |
|
||||
|
||||
### 2. 📊 대시보드 화면
|
||||
**구현율: 90%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/overview/stats` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/overview/recent-activities` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/overview/equipment-status` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/overview/license-expiry` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/statistics/summary` | ✅ | ❌ 미구현 | `/overview/stats`로 대체 가능 |
|
||||
|
||||
### 3. 🏭 장비 관리
|
||||
**구현율: 87.5%**
|
||||
|
||||
#### 장비 목록
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/equipment` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/equipment/search` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/equipment/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/equipment/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
#### 장비 입고
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| POST `/api/v1/equipment` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/equipment/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/equipment/in` | ✅ | ⚠️ 타입 오류 | DbConn → DatabaseConnection |
|
||||
| GET `/api/v1/equipment/manufacturers` | ✅ | ❌ 미구현 | lookup API로 구현 필요 |
|
||||
| GET `/api/v1/equipment/names` | ✅ | ❌ 미구현 | 자동완성용 |
|
||||
| GET `/api/v1/equipment/categories` | ✅ | ✅ 구현됨 | `/lookups` 사용 |
|
||||
|
||||
#### 장비 출고
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| POST `/api/v1/equipment/out` | ✅ | ⚠️ 타입 오류 | DbConn → DatabaseConnection |
|
||||
| POST `/api/v1/equipment/{id}/status` | ✅ | ✅ 구현됨 | PATCH 메서드로 |
|
||||
| POST `/api/v1/equipment/batch-out` | ✅ | ❌ 미구현 | 대량 출고 처리 |
|
||||
|
||||
#### 장비 고급 기능
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| POST `/api/v1/equipment/{id}/history` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/equipment/{id}/history` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/equipment/rentals` | ✅ | ✅ 구현됨 | 대여 처리 |
|
||||
| POST `/api/v1/equipment/rentals/{id}/return` | ✅ | ✅ 구현됨 | 반납 처리 |
|
||||
| POST `/api/v1/equipment/repairs` | ✅ | ✅ 구현됨 | 수리 처리 |
|
||||
| POST `/api/v1/equipment/disposals` | ✅ | ✅ 구현됨 | 폐기 처리 |
|
||||
|
||||
### 4. 🏢 회사 관리
|
||||
**구현율: 95%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/companies` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/companies/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/companies` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/companies/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/companies/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/companies/search` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/companies/names` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/companies/check-duplicate` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/companies/with-branches` | ✅ | ❌ 미구현 | 지점 포함 조회 |
|
||||
|
||||
#### 지점 관리
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/companies/{id}/branches` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/companies/{id}/branches` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/companies/{id}/branches/{bid}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/companies/{id}/branches/{bid}` | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
### 5. 👥 사용자 관리
|
||||
**구현율: 88.9%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/users` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/users/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/users` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/users/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/users/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/users/search` | ✅ | ✅ 구현됨 | - |
|
||||
| PATCH `/api/v1/users/{id}/status` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/users/{id}/change-password` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/users/{id}/branch` | ✅ | ❌ 미구현 | 사용자 상세에 포함 |
|
||||
|
||||
### 6. 📜 라이선스 관리
|
||||
**구현율: 100%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/licenses` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/licenses/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/licenses` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/licenses/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/licenses/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/licenses/expiring` | ✅ | ✅ 구현됨 | - |
|
||||
| PATCH `/api/v1/licenses/{id}/assign` | ✅ | ✅ 구현됨 | - |
|
||||
| PATCH `/api/v1/licenses/{id}/unassign` | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
### 7. 🏭 창고 위치 관리
|
||||
**구현율: 87.5%**
|
||||
|
||||
| API 엔드포인트 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|---------------|----------|-----------|------|
|
||||
| GET `/api/v1/warehouse-locations` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/warehouse-locations/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| POST `/api/v1/warehouse-locations` | ✅ | ✅ 구현됨 | - |
|
||||
| PUT `/api/v1/warehouse-locations/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| DELETE `/api/v1/warehouse-locations/{id}` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/warehouse-locations/{id}/equipment` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/warehouse-locations/{id}/capacity` | ✅ | ✅ 구현됨 | - |
|
||||
| GET `/api/v1/warehouse-locations/search` | ✅ | ❌ 미구현 | 검색 기능 |
|
||||
|
||||
## 🔧 기능별 API 구현 현황
|
||||
|
||||
### 인증/권한
|
||||
**구현율: 80%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| JWT 토큰 인증 | ✅ | ✅ 구현됨 | - |
|
||||
| 역할 기반 권한 | ✅ | ✅ 구현됨 | admin/manager/staff/viewer |
|
||||
| 토큰 갱신 | ✅ | ✅ 구현됨 | - |
|
||||
| 비밀번호 변경 | ✅ | ✅ 구현됨 | - |
|
||||
| 비밀번호 재설정 | ✅ | ❌ 미구현 | 이메일 기반 재설정 |
|
||||
|
||||
### 파일 업로드
|
||||
**구현율: 100%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| 파일 업로드 | ✅ | ✅ 구현됨 | `/api/v1/files/upload` |
|
||||
| 파일 다운로드 | ✅ | ✅ 구현됨 | `/api/v1/files/{id}` |
|
||||
| 파일 삭제 | ✅ | ✅ 구현됨 | - |
|
||||
| 이미지 미리보기 | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
### 보고서/내보내기
|
||||
**구현율: 100%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| PDF 생성 | ✅ | ✅ 구현됨 | `/api/v1/reports/*/pdf` |
|
||||
| Excel 내보내기 | ✅ | ✅ 구현됨 | `/api/v1/reports/*/excel` |
|
||||
| 맞춤 보고서 | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
### 통계/대시보드
|
||||
**구현율: 100%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| 전체 통계 | ✅ | ✅ 구현됨 | - |
|
||||
| 장비 상태 분포 | ✅ | ✅ 구현됨 | - |
|
||||
| 라이선스 만료 현황 | ✅ | ✅ 구현됨 | - |
|
||||
| 최근 활동 | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
### 대량 처리
|
||||
**구현율: 66.7%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| 대량 업로드 | ✅ | ✅ 구현됨 | `/api/v1/bulk/upload` |
|
||||
| 대량 수정 | ✅ | ✅ 구현됨 | `/api/v1/bulk/update` |
|
||||
| 대량 출고 | ✅ | ❌ 미구현 | 다중 장비 동시 출고 |
|
||||
|
||||
### 감사/백업
|
||||
**구현율: 100%**
|
||||
|
||||
| 기능 | 필요 여부 | 구현 상태 | 비고 |
|
||||
|------|----------|-----------|------|
|
||||
| 감사 로그 | ✅ | ✅ 구현됨 | `/api/v1/audit-logs` |
|
||||
| 백업 생성 | ✅ | ✅ 구현됨 | `/api/v1/backup/create` |
|
||||
| 백업 복원 | ✅ | ✅ 구현됨 | `/api/v1/backup/restore` |
|
||||
| 백업 스케줄 | ✅ | ✅ 구현됨 | - |
|
||||
|
||||
## 🚨 미구현 API 목록 및 우선순위
|
||||
|
||||
### 긴급 (핵심 기능)
|
||||
1. **장비 제조사 목록** - `GET /api/v1/equipment/manufacturers`
|
||||
- 장비 입력 시 자동완성 기능에 필수
|
||||
- `/api/v1/lookups`에 추가 구현 권장
|
||||
|
||||
2. **장비명 자동완성** - `GET /api/v1/equipment/names`
|
||||
- 장비 검색 UX 개선에 필수
|
||||
- distinct 쿼리로 구현
|
||||
|
||||
3. **대량 출고 처리** - `POST /api/v1/equipment/batch-out`
|
||||
- 여러 장비 동시 출고 기능
|
||||
- 트랜잭션 처리 필요
|
||||
|
||||
### 높음 (주요 기능)
|
||||
4. **회사-지점 통합 조회** - `GET /api/v1/companies/with-branches`
|
||||
- 출고 시 회사/지점 선택에 필요
|
||||
- 기존 API 확장으로 구현 가능
|
||||
|
||||
5. **비밀번호 재설정** - `POST /api/v1/auth/reset-password`
|
||||
- 사용자 편의성 개선
|
||||
- 이메일 서비스 연동 필요
|
||||
|
||||
6. **창고 위치 검색** - `GET /api/v1/warehouse-locations/search`
|
||||
- 창고 위치 빠른 검색
|
||||
- 기존 검색 패턴 활용
|
||||
|
||||
### 보통 (부가 기능)
|
||||
7. **통계 요약 API 통합** - `GET /api/v1/statistics/summary`
|
||||
- 현재 `/overview/stats`로 대체 가능
|
||||
- API 일관성을 위해 별칭 추가 권장
|
||||
|
||||
8. **사용자 지점 정보** - `GET /api/v1/users/{id}/branch`
|
||||
- 사용자 상세 조회에 이미 포함됨
|
||||
- 별도 엔드포인트 불필요
|
||||
|
||||
## 🔧 즉시 수정 필요 사항
|
||||
|
||||
### 1. 장비 입출고 API 타입 오류
|
||||
**파일**: `/src/handlers/equipment.rs`
|
||||
|
||||
```rust
|
||||
// 현재 (오류)
|
||||
pub async fn handle_equipment_in(
|
||||
db: web::Data<DbConn>, // ❌ DbConn 타입 없음
|
||||
claims: web::ReqData<TokenClaims>, // ❌ TokenClaims 타입 없음
|
||||
// ...
|
||||
)
|
||||
|
||||
// 수정 필요
|
||||
pub async fn handle_equipment_in(
|
||||
db: web::Data<DatabaseConnection>, // ✅
|
||||
claims: web::ReqData<Claims>, // ✅
|
||||
// ...
|
||||
)
|
||||
```
|
||||
|
||||
### 2. 플러터-백엔드 권한 레벨 매핑
|
||||
**이슈**: Flutter는 'S'(관리자), 'M'(일반)을 사용하지만 백엔드는 'admin', 'manager', 'staff', 'viewer' 사용
|
||||
|
||||
**해결방안**:
|
||||
```dart
|
||||
// Flutter 유틸리티 함수 추가
|
||||
String mapFlutterRoleToBackend(String flutterRole) {
|
||||
switch (flutterRole) {
|
||||
case 'S': return 'admin';
|
||||
case 'M': return 'staff';
|
||||
default: return 'viewer';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. API 응답 형식 일관성
|
||||
일부 API가 표준 응답 형식을 따르지 않음. 모든 API가 다음 형식을 따르도록 수정 필요:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": { ... },
|
||||
"meta": { ... } // 페이지네이션 시
|
||||
}
|
||||
```
|
||||
|
||||
## 💡 추가 구현 제안사항
|
||||
|
||||
### 1. WebSocket 실시간 기능
|
||||
- 장비 상태 실시간 업데이트
|
||||
- 라이선스 만료 실시간 알림
|
||||
- 다중 사용자 동시 편집 방지
|
||||
|
||||
### 2. 배치 작업 스케줄러
|
||||
- 정기 백업 자동화
|
||||
- 라이선스 만료 알림 발송
|
||||
- 장비 점검 일정 알림
|
||||
|
||||
### 3. 모바일 전용 API
|
||||
- 바코드 스캔 장비 조회
|
||||
- 오프라인 동기화
|
||||
- 푸시 알림
|
||||
|
||||
### 4. 고급 검색 기능
|
||||
- Elasticsearch 연동
|
||||
- 전문 검색
|
||||
- 필터 조합 저장
|
||||
|
||||
## 🛠️ 기술적 고려사항
|
||||
|
||||
### 1. 성능 최적화
|
||||
- N+1 쿼리 문제 해결 (eager loading)
|
||||
- 응답 캐싱 구현
|
||||
- 페이지네이션 기본값 설정
|
||||
|
||||
### 2. 보안 강화
|
||||
- Rate limiting 구현됨 ✅
|
||||
- CORS 설정됨 ✅
|
||||
- SQL injection 방지됨 ✅
|
||||
- XSS 방지 헤더 추가됨 ✅
|
||||
|
||||
### 3. 문서화
|
||||
- OpenAPI 3.0 스펙 작성됨 ✅
|
||||
- Postman 컬렉션 생성 필요
|
||||
- API 버저닝 전략 수립 필요
|
||||
|
||||
## 📈 결론
|
||||
|
||||
SuperPort 백엔드 API는 전체적으로 매우 높은 수준으로 구현되어 있습니다. 기본 CRUD 기능뿐만 아니라 고급 기능들(대량 처리, 보고서 생성, 감사 로그, 백업 등)도 대부분 구현되어 있어 즉시 프로덕션 사용이 가능한 수준입니다.
|
||||
|
||||
단, 프론트엔드와의 완전한 연동을 위해서는:
|
||||
1. 장비 입출고 API의 타입 오류 수정 (긴급)
|
||||
2. 자동완성을 위한 lookup API 추가
|
||||
3. 대량 출고 기능 구현
|
||||
4. Flutter 앱의 API 클라이언트 구현
|
||||
|
||||
이러한 작업이 완료되면 MockDataService를 실제 API 호출로 전환할 수 있습니다.
|
||||
Reference in New Issue
Block a user