refactor: Clean Architecture 적용 및 코드베이스 전면 리팩토링
## 주요 변경사항 ### 아키텍처 개선 - Clean Architecture 패턴 적용 (Domain, Data, Presentation 레이어 분리) - Use Case 패턴 도입으로 비즈니스 로직 캡슐화 - Repository 패턴으로 데이터 접근 추상화 - 의존성 주입 구조 개선 ### 상태 관리 최적화 - 모든 Controller에서 불필요한 상태 관리 로직 제거 - 페이지네이션 로직 통일 및 간소화 - 에러 처리 로직 개선 (에러 메시지 한글화) - 로딩 상태 관리 최적화 ### Mock 서비스 제거 - MockDataService 완전 제거 - 모든 화면을 실제 API 전용으로 전환 - 불필요한 Mock 관련 코드 정리 ### UI/UX 개선 - Overview 화면 대시보드 기능 강화 - 라이선스 만료 알림 위젯 추가 - 사이드바 네비게이션 개선 - 일관된 UI 컴포넌트 사용 ### 코드 품질 - 중복 코드 제거 및 함수 추출 - 파일별 책임 분리 명확화 - 테스트 코드 업데이트 ## 영향 범위 - 모든 화면의 Controller 리팩토링 - API 통신 레이어 구조 개선 - 에러 처리 및 로깅 시스템 개선 ## 향후 계획 - 단위 테스트 커버리지 확대 - 통합 테스트 시나리오 추가 - 성능 모니터링 도구 통합
This commit is contained in:
176
docs/backend_api_requests.md
Normal file
176
docs/backend_api_requests.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# 백엔드 API 구현 요청 사항
|
||||
|
||||
## 1. 시리얼 번호 중복 체크 API
|
||||
|
||||
### 요청 사항
|
||||
장비 입고 시 시리얼 번호 중복을 방지하기 위한 API가 필요합니다.
|
||||
|
||||
### API 스펙
|
||||
|
||||
#### Endpoint
|
||||
```
|
||||
POST /api/v1/equipment/check-serial
|
||||
```
|
||||
|
||||
#### Request Body
|
||||
```json
|
||||
{
|
||||
"serialNumber": "SN123456789"
|
||||
}
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
**성공 (200 OK) - 사용 가능한 시리얼 번호**
|
||||
```json
|
||||
{
|
||||
"available": true,
|
||||
"message": "사용 가능한 시리얼 번호입니다."
|
||||
}
|
||||
```
|
||||
|
||||
**성공 (200 OK) - 중복된 시리얼 번호**
|
||||
```json
|
||||
{
|
||||
"available": false,
|
||||
"message": "이미 등록된 시리얼 번호입니다.",
|
||||
"existingEquipment": {
|
||||
"id": 123,
|
||||
"name": "장비명",
|
||||
"companyName": "회사명",
|
||||
"warehouseLocation": "창고 위치"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**실패 (400 Bad Request) - 잘못된 요청**
|
||||
```json
|
||||
{
|
||||
"error": "시리얼 번호를 입력해주세요."
|
||||
}
|
||||
```
|
||||
|
||||
### 구현 요구사항
|
||||
|
||||
1. **중복 체크 로직**
|
||||
- equipment 테이블의 serial_number 컬럼에서 중복 확인
|
||||
- 대소문자 구분 없이 체크 (case-insensitive)
|
||||
- 공백 제거 후 비교 (trim)
|
||||
|
||||
2. **성능 고려사항**
|
||||
- serial_number 컬럼에 인덱스 필요
|
||||
- 빠른 응답을 위한 최적화
|
||||
|
||||
3. **보안 고려사항**
|
||||
- SQL Injection 방지
|
||||
- Rate limiting 적용 (분당 60회 제한)
|
||||
|
||||
### 프론트엔드 통합 코드
|
||||
|
||||
```dart
|
||||
// services/equipment_service.dart
|
||||
Future<bool> checkSerialNumberAvailability(String serialNumber) async {
|
||||
final response = await dio.post(
|
||||
'/equipment/check-serial',
|
||||
data: {'serialNumber': serialNumber},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
return response.data['available'] ?? false;
|
||||
}
|
||||
throw Exception('시리얼 번호 확인 실패');
|
||||
}
|
||||
|
||||
// controllers/equipment_form_controller.dart
|
||||
Future<String?> validateSerialNumber(String? value) async {
|
||||
if (value == null || value.isEmpty) {
|
||||
return '시리얼 번호를 입력해주세요.';
|
||||
}
|
||||
|
||||
// 실시간 중복 체크
|
||||
final isAvailable = await _equipmentService.checkSerialNumberAvailability(value);
|
||||
if (!isAvailable) {
|
||||
return '이미 등록된 시리얼 번호입니다.';
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 벌크 시리얼 번호 체크 API (추가 제안)
|
||||
|
||||
### 요청 사항
|
||||
여러 장비를 한 번에 등록할 때 시리얼 번호들을 일괄 체크하는 API
|
||||
|
||||
### API 스펙
|
||||
|
||||
#### Endpoint
|
||||
```
|
||||
POST /api/v1/equipment/check-serial-bulk
|
||||
```
|
||||
|
||||
#### Request Body
|
||||
```json
|
||||
{
|
||||
"serialNumbers": ["SN001", "SN002", "SN003"]
|
||||
}
|
||||
```
|
||||
|
||||
#### Response
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"serialNumber": "SN001",
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"serialNumber": "SN002",
|
||||
"available": false,
|
||||
"existingEquipmentId": 456
|
||||
},
|
||||
{
|
||||
"serialNumber": "SN003",
|
||||
"available": true
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"total": 3,
|
||||
"available": 2,
|
||||
"duplicates": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 3. 시리얼 번호 유니크 제약 조건
|
||||
|
||||
### 데이터베이스 스키마 변경 요청
|
||||
|
||||
```sql
|
||||
-- equipment 테이블에 유니크 제약 조건 추가
|
||||
ALTER TABLE equipment
|
||||
ADD CONSTRAINT unique_serial_number
|
||||
UNIQUE (serial_number);
|
||||
|
||||
-- 성능을 위한 인덱스 추가 (이미 유니크 제약에 포함되지만 명시적으로)
|
||||
CREATE INDEX idx_equipment_serial_number
|
||||
ON equipment(LOWER(TRIM(serial_number)));
|
||||
```
|
||||
|
||||
## 구현 우선순위
|
||||
|
||||
1. **Phase 1 (즉시)**: 단일 시리얼 번호 체크 API
|
||||
2. **Phase 2 (선택)**: 벌크 시리얼 번호 체크 API
|
||||
3. **Phase 3 (필수)**: DB 유니크 제약 조건
|
||||
|
||||
## 예상 일정
|
||||
|
||||
- API 구현: 2-3시간
|
||||
- 테스트: 1시간
|
||||
- 배포: 30분
|
||||
|
||||
---
|
||||
|
||||
작성일: 2025-01-09
|
||||
작성자: Frontend Team
|
||||
상태: 백엔드 팀 검토 대기중
|
||||
Reference in New Issue
Block a user