# 계약관리 (Contract) API 연동 계획

> **작성일**: 2026-01-08
> **상위 문서**: [construction-api-integration-plan.md](../construction-api-integration-plan.md)
> **상태**: ⏳ 대기

---

## 1. 컴포넌트 분석

### 1.1 파일 위치
```
react/src/
├── app/[locale]/(protected)/construction/project/contract/
│   └── page.tsx
└── components/business/construction/contract/
    ├── ContractListClient.tsx
    ├── actions.ts
    └── types.ts
```

### 1.2 현재 Mock 데이터

**actions.ts 내 MOCK_CONTRACTS:**
```typescript
const MOCK_CONTRACTS: Contract[] = [
  {
    id: '1',
    contractNumber: 'CON-2025-0001',
    title: '강남 오피스텔 신축공사 계약',
    partnerId: '1',
    partnerName: '대우건설',
    contractManagerId: 'M1',
    contractManagerName: '김영수',
    constructionPmId: 'PM1',
    constructionPmName: '이철수',
    startDate: '2025-01-01',
    endDate: '2025-12-31',
    amount: 5000000000,
    status: 'active',
    stage: 'construction',
    createdAt: '2024-12-01T00:00:00Z',
    updatedAt: '2025-01-01T00:00:00Z',
  },
  // ... 총 9개 계약
];
```

### 1.3 현재 함수 목록

| 함수명 | 용도 | Mock 상태 |
|--------|------|:--------:|
| `getContractList` | 계약 목록 조회 | ✅ Mock |
| `getContractStats` | 계약 통계 조회 | ✅ Mock |
| `getContractStageCounts` | 단계별 카운트 | ✅ Mock |
| `getContract` | 계약 상세 조회 | ✅ Mock |
| `deleteContract` | 계약 삭제 | ✅ Mock |
| `deleteContracts` | 계약 일괄 삭제 | ✅ Mock |
| `getContractDetail` | 계약 상세 (확장) | ✅ Mock |
| `updateContract` | 계약 수정 | ✅ Mock |

---

## 2. API 설계

### 2.1 엔드포인트

| Method | Endpoint | 용도 |
|--------|----------|------|
| GET | `/api/construction/contracts` | 목록 조회 |
| GET | `/api/construction/contracts/stats` | 통계 조회 |
| GET | `/api/construction/contracts/stage-counts` | 단계별 카운트 |
| GET | `/api/construction/contracts/{id}` | 상세 조회 |
| POST | `/api/construction/contracts` | 등록 |
| PUT | `/api/construction/contracts/{id}` | 수정 |
| DELETE | `/api/construction/contracts/{id}` | 삭제 |
| DELETE | `/api/construction/contracts/bulk` | 일괄 삭제 |

### 2.2 요청/응답 스키마

**목록 조회 Request:**
```typescript
interface GetContractListParams {
  page?: number;
  size?: number;
  startDate?: string;
  endDate?: string;
  partnerId?: string;
  contractManagerId?: string;
  constructionPmId?: string;
  status?: ContractStatus;
  stage?: ContractStage;
  search?: string;
}
```

**목록 조회 Response:**
```typescript
interface ContractListResponse {
  items: Contract[];
  totalCount: number;
  page: number;
  size: number;
}
```

---

## 3. 작업 항목

### 3.1 Backend (API)

| # | 작업 | 상태 | 비고 |
|---|------|:----:|------|
| 1 | ContractController 생성 | ⏳ | |
| 2 | ContractService 생성 | ⏳ | |
| 3 | ContractFormRequest 생성 | ⏳ | |
| 4 | Contract 모델 확인/수정 | ⏳ | |
| 5 | routes/api.php 등록 | ⏳ | |
| 6 | Swagger 문서 작성 | ⏳ | |

### 3.2 Frontend (React)

| # | 작업 | 상태 | 비고 |
|---|------|:----:|------|
| 1 | actions.ts Mock → API 변환 | ⏳ | |
| 2 | API 클라이언트 연동 | ⏳ | |
| 3 | 에러 핸들링 추가 | ⏳ | |
| 4 | types.ts 정합성 확인 | ⏳ | |

---

## 4. 타입 정의

### 4.1 Contract 타입

```typescript
interface Contract {
  id: string;
  contractNumber: string;
  title: string;
  partnerId: string;
  partnerName: string;
  contractManagerId: string;
  contractManagerName: string;
  constructionPmId: string;
  constructionPmName: string;
  startDate: string;
  endDate: string;
  amount: number;
  status: ContractStatus;
  stage: ContractStage;
  createdAt: string;
  updatedAt: string;
}

type ContractStatus = 'active' | 'completed' | 'suspended' | 'terminated';
type ContractStage = 'contract' | 'pre_construction' | 'construction' | 'completion' | 'warranty';
```

---

## 5. 변경 이력

| 날짜 | 작업 | 상태 |
|------|------|------|
| 2026-01-08 | 문서 초안 작성 | ✅ |

---

*상위 문서: [construction-api-integration-plan.md](../construction-api-integration-plan.md)*