Files
superport/docs/backend_api_requests.md
JiWoong Sul 162fe08618
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: Clean Architecture 적용 및 코드베이스 전면 리팩토링
## 주요 변경사항

### 아키텍처 개선
- Clean Architecture 패턴 적용 (Domain, Data, Presentation 레이어 분리)
- Use Case 패턴 도입으로 비즈니스 로직 캡슐화
- Repository 패턴으로 데이터 접근 추상화
- 의존성 주입 구조 개선

### 상태 관리 최적화
- 모든 Controller에서 불필요한 상태 관리 로직 제거
- 페이지네이션 로직 통일 및 간소화
- 에러 처리 로직 개선 (에러 메시지 한글화)
- 로딩 상태 관리 최적화

### Mock 서비스 제거
- MockDataService 완전 제거
- 모든 화면을 실제 API 전용으로 전환
- 불필요한 Mock 관련 코드 정리

### UI/UX 개선
- Overview 화면 대시보드 기능 강화
- 라이선스 만료 알림 위젯 추가
- 사이드바 네비게이션 개선
- 일관된 UI 컴포넌트 사용

### 코드 품질
- 중복 코드 제거 및 함수 추출
- 파일별 책임 분리 명확화
- 테스트 코드 업데이트

## 영향 범위
- 모든 화면의 Controller 리팩토링
- API 통신 레이어 구조 개선
- 에러 처리 및 로깅 시스템 개선

## 향후 계획
- 단위 테스트 커버리지 확대
- 통합 테스트 시나리오 추가
- 성능 모니터링 도구 통합
2025-08-11 00:04:28 +09:00

3.6 KiB

백엔드 API 구현 요청 사항

1. 시리얼 번호 중복 체크 API

요청 사항

장비 입고 시 시리얼 번호 중복을 방지하기 위한 API가 필요합니다.

API 스펙

Endpoint

POST /api/v1/equipment/check-serial

Request Body

{
  "serialNumber": "SN123456789"
}

Response

성공 (200 OK) - 사용 가능한 시리얼 번호

{
  "available": true,
  "message": "사용 가능한 시리얼 번호입니다."
}

성공 (200 OK) - 중복된 시리얼 번호

{
  "available": false,
  "message": "이미 등록된 시리얼 번호입니다.",
  "existingEquipment": {
    "id": 123,
    "name": "장비명",
    "companyName": "회사명",
    "warehouseLocation": "창고 위치"
  }
}

실패 (400 Bad Request) - 잘못된 요청

{
  "error": "시리얼 번호를 입력해주세요."
}

구현 요구사항

  1. 중복 체크 로직

    • equipment 테이블의 serial_number 컬럼에서 중복 확인
    • 대소문자 구분 없이 체크 (case-insensitive)
    • 공백 제거 후 비교 (trim)
  2. 성능 고려사항

    • serial_number 컬럼에 인덱스 필요
    • 빠른 응답을 위한 최적화
  3. 보안 고려사항

    • SQL Injection 방지
    • Rate limiting 적용 (분당 60회 제한)

프론트엔드 통합 코드

// 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

{
  "serialNumbers": ["SN001", "SN002", "SN003"]
}

Response

{
  "results": [
    {
      "serialNumber": "SN001",
      "available": true
    },
    {
      "serialNumber": "SN002",
      "available": false,
      "existingEquipmentId": 456
    },
    {
      "serialNumber": "SN003",
      "available": true
    }
  ],
  "summary": {
    "total": 3,
    "available": 2,
    "duplicates": 1
  }
}

3. 시리얼 번호 유니크 제약 조건

데이터베이스 스키마 변경 요청

-- 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 상태: 백엔드 팀 검토 대기중