# 시공사 페이지 API 연동 계획 > **작성일**: 2026-01-08 > **목적**: 시공사 8개 페이지 Mock → API 연동 > **기준 문서**: `docs/standards/api-rules.md`, `docs/guides/swagger-guide.md` > **상태**: ✅ 완료 --- ## 📍 현재 진행 상태 | 항목 | 내용 | |------|------| | **마지막 완료 작업** | Phase 3.4: 노임관리 API 연동 완료 ✅ | | **다음 작업** | 🎉 **전체 완료** | | **진행률** | 8/8 (100%) | | **마지막 업데이트** | 2026-01-12 | --- ## 0. 전제 조건 (Prerequisites) ### 0.1 환경 확인 ```bash # Docker 컨테이너 상태 확인 docker ps | grep sam # API 서버 접속 확인 curl -I http://api.sam.kr/api/health # React 개발 서버 확인 curl -I http://react.sam.kr ``` **체크리스트:** - [ ] Docker 컨테이너 실행 중 (api, react, mysql) - [ ] api.sam.kr 접속 가능 (200 응답) - [ ] react.sam.kr 접속 가능 (200 응답) - [ ] 데이터베이스 연결 정상 ### 0.2 권한 및 인증 - [ ] API 개발 권한 (`api/` 디렉토리 수정 가능) - [ ] React 개발 권한 (`react/` 디렉토리 수정 가능) - [ ] Sanctum 토큰 발급 방법 숙지 (테스트용) ### 0.3 필수 도구 - PHP 8.4+, Composer - Node.js 20+, pnpm - Git --- ## 1. 개요 ### 1.1 배경 시공사 메뉴의 8개 페이지가 현재 모두 Mock 데이터를 사용하고 있으며, 실제 API 연동이 필요함. (물량검토관리는 Frontend/기획 미존재로 제외) ### 1.2 기준 원칙 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 🎯 핵심 원칙 │ ├─────────────────────────────────────────────────────────────────┤ │ - Service-First: 비즈니스 로직 → Service Layer │ │ - Multi-tenancy: BelongsToTenant 필수 │ │ - FormRequest: Controller 검증 금지 │ │ - Server Actions: React에서 'use server' 패턴 사용 │ └─────────────────────────────────────────────────────────────────┘ ``` ### 1.3 변경 승인 정책 | 분류 | 예시 | 승인 | |------|------|------| | ✅ 즉시 가능 | actions.ts Mock→API 변경, 타입 수정 | 불필요 | | ⚠️ 컨펌 필요 | 새 API 엔드포인트 생성, DB 스키마 변경 | **필수** | | 🔴 금지 | 기존 API 삭제, 테이블 구조 변경 | 별도 협의 | ### 1.4 준수 규칙 - `docs/standards/api-rules.md` - API 개발 규칙 ✅ 존재 - `docs/guides/swagger-guide.md` - Swagger 작성 가이드 ✅ 존재 - `docs/standards/quality-checklist.md` - 품질 체크리스트 ✅ 존재 --- ## 2. 대상 범위 ### 2.1 Phase 1: 계약관리 (Contract) | # | 작업 항목 | 상태 | 서브 문서 | |---|----------|:----:|----------| | 1.1 | 계약관리 (contract) | ✅ | [contract-plan.md](./sub/contract-plan.md) | | 1.2 | 인수인계보고서관리 (handover-report) | ✅ | [handover-report-plan.md](./sub/handover-report-plan.md) | ### 2.2 Phase 2: 발주관리 (Order) | # | 작업 항목 | 상태 | 서브 문서 | |---|----------|:----:|----------| | 2.1 | 현장관리 (site-management) | ✅ | [site-management-plan.md](./sub/site-management-plan.md) | | 2.2 | 구조검토관리 (structure-review) | ✅ | [structure-review-plan.md](./sub/structure-review-plan.md) | | 2.3 | 물량검토관리 (quantity-review) | ❌ 제외 | Frontend/기획 미존재 | ### 2.3 Phase 3: 기준정보 (Base Info) | # | 작업 항목 | 상태 | 서브 문서 | |---|----------|:----:|----------| | 3.1 | 카테고리관리 (categories) | ✅ | [categories-plan.md](./sub/categories-plan.md) | | 3.2 | 품목관리 (items) | ✅ | [items-plan.md](./sub/items-plan.md) | | 3.3 | 단가관리 (pricing) | ✅ | [pricing-plan.md](./sub/pricing-plan.md) | | 3.4 | 노임관리 (labor) | ✅ | [labor-plan.md](./sub/labor-plan.md) | --- ## 3. API 현황 분석 ### 3.1 기존 API (연동 가능) | API | 경로 | 상태 | 대상 컴포넌트 | |-----|------|:----:|--------------| | categories | `/api/construction/categories` | ✅ 존재 | 카테고리관리 | | pricing | `/api/construction/pricing` | ✅ 존재 | 단가관리 | ### 3.2 신규 개발 필요 API | API | 예상 경로 | 우선순위 | 대상 컴포넌트 | |-----|----------|:--------:|--------------| | contracts | `/api/construction/contracts` | ✅ 완료 | 계약관리 | | handover-reports | `/api/construction/handover-reports` | ✅ 완료 | 인수인계보고서 | | sites | `/api/construction/sites` | ✅ 완료 | 현장관리 | | structure-reviews | `/api/construction/structure-reviews` | ✅ 완료 | 구조검토관리 | | quantity-reviews | `/api/construction/quantity-reviews` | ❌ 제외 | 물량검토관리 (Frontend/기획 미존재) | | items | `/api/construction/items` | 🟢 낮음 | 품목관리 | | labor | `/api/construction/labor` | 🟢 낮음 | 노임관리 | --- ## 4. 작업 절차 ### 4.1 단계별 절차 (상세) ``` Step 1: 서브 문서 확인 ├── docs/plans/sub/{module}-plan.md 읽기 ├── 현재 Mock 데이터 구조 확인 └── 필요한 API 엔드포인트 파악 Step 2: API 엔드포인트 확인/생성 ├── api/routes/api.php에서 기존 API 확인 ├── 없으면: │ ├── Controller 생성: php artisan make:controller Api/Construction/{Name}Controller │ ├── Service 생성: app/Services/Construction/{Name}Service.php │ ├── FormRequest 생성: php artisan make:request Api/Construction/{Name}Request │ └── Model 확인/생성 └── Swagger 문서 작성 Step 3: React actions.ts 수정 ├── react/src/components/business/construction/{module}/actions.ts 열기 ├── Mock 데이터 상수 제거 (MOCK_XXX) ├── API 호출 로직 구현: │ └── const response = await fetch('/api/construction/{endpoint}', {...}) └── 에러 핸들링 추가 Step 4: 타입 정합성 확인 ├── API 응답과 프론트엔드 타입 매칭 ├── types.ts 수정 (snake_case → camelCase 변환 등) └── 컴포넌트 수정 (필요시) Step 5: 테스트 및 검증 ├── API 직접 호출 테스트 (curl/Postman) ├── UI 동작 확인 (브라우저) └── 에러 케이스 테스트 ``` ### 4.2 첫 번째 작업 시작점 **Phase 1.1 계약관리 시작:** ```bash # 1. 서브 문서 읽기 cat docs/plans/sub/contract-plan.md # 2. 현재 Mock 확인 cat react/src/components/business/construction/contract/actions.ts # 3. API 존재 여부 확인 grep -n "contracts" api/routes/api.php # 4. 없으면 Controller 생성 cd api && php artisan make:controller Api/Construction/ContractController --resource ``` --- ## 5. 환경 정보 ### 5.1 프로젝트 구조 ``` SAM/ ├── api/ # Laravel 12 REST API │ ├── app/Http/Controllers/Api/Construction/ │ ├── app/Services/Construction/ │ └── routes/api.php │ ├── react/ # Next.js 15 Frontend │ └── src/ │ ├── app/[locale]/(protected)/construction/ │ │ ├── project/contract/ # 계약관리 │ │ ├── project/contract/handover-report/ # 인수인계 │ │ ├── order/site-management/ # 현장관리 │ │ ├── order/structure-review/ # 구조검토 │ │ ├── order/order-management/ # 발주관리 │ │ └── order/base-info/ # 기준정보 │ │ ├── categories/ │ │ ├── items/ │ │ ├── pricing/ │ │ └── labor/ │ └── components/business/construction/ │ └── docs/plans/ # 계획 문서 ├── construction-api-integration-plan.md # 메인 (현재 문서) └── sub/ # 서브 문서 (9개) ``` ### 5.2 개발 환경 | 항목 | 값 | |------|-----| | 도메인 | sam.kr (로컬) | | API | api.sam.kr | | React | react.sam.kr | | PHP | 8.4+ | | Laravel | 12 | | Next.js | 15 | --- ## 6. 컴포넌트 분석 요약 ### 6.1 계약관리 (Contract) | 컴포넌트 | Mock 상태 | 주요 기능 | |----------|:--------:|----------| | ContractListClient | ✅ Mock | 목록, 검색, 삭제, 필터 | | 인수인계보고서 | ✅ Mock | 목록, 상세, 삭제 | ### 6.2 발주관리 (Order) | 컴포넌트 | Mock 상태 | 주요 기능 | |----------|:--------:|----------| | SiteManagementListClient | ✅ Mock | 현장 목록, 통계, 삭제 | | StructureReviewListClient | ✅ Mock | 구조검토 목록, 상태 관리 | | OrderManagementClient | ✅ Mock | 발주 목록, 필터, 삭제 | ### 6.3 기준정보 (Base Info) | 컴포넌트 | Mock 상태 | API 존재 | 주요 기능 | |----------|:--------:|:-------:|----------| | CategoryManagementClient | ✅ Mock | ✅ | 카테고리 CRUD, 순서 변경 | | ItemManagementClient | ✅ Mock | ❌ | 품목 CRUD, 카테고리 연결 | | PricingListClient | ✅ Mock | ✅ | 단가 CRUD, 버전 관리 | | LaborManagementClient | ✅ Mock | ❌ | 노임 CRUD, 단가 관리 | --- ## 7. 성공 기준 ### 7.1 각 페이지 완료 조건 | # | 조건 | 확인 방법 | |---|------|----------| | 1 | Mock 데이터 완전 제거 | `grep -r "MOCK_" actions.ts` 결과 없음 | | 2 | API 호출 성공 | 네트워크 탭에서 200 응답 확인 | | 3 | UI에서 데이터 정상 표시 | 목록에 실제 데이터 표시 | | 4 | CRUD 동작 정상 | 생성/조회/수정/삭제 모두 동작 | | 5 | 에러 핸들링 동작 | 네트워크 끊김 시 에러 메시지 표시 | ### 7.2 전체 완료 조건 - [ ] 8개 페이지 모두 API 연동 완료 (4/8) - [ ] Swagger 문서 작성 완료 - [ ] 기본 동작 테스트 통과 - [ ] 코드 리뷰 완료 ### 7.3 품질 기준 - API 응답 시간: < 500ms - 에러 발생 시 사용자 친화적 메시지 표시 - TypeScript 타입 에러 0개 - ESLint 경고 0개 --- ## 8. 검증 방법 ### 8.1 API 테스트 (curl) ```bash # 1. 인증 토큰 획득 (테스트용) TOKEN=$(curl -s -X POST "http://api.sam.kr/api/auth/login" \ -H "Content-Type: application/json" \ -d '{"email":"test@test.com","password":"password"}' | jq -r '.token') # 2. 계약 목록 조회 curl -X GET "http://api.sam.kr/api/construction/contracts" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" # 3. 계약 상세 조회 curl -X GET "http://api.sam.kr/api/construction/contracts/1" \ -H "Authorization: Bearer $TOKEN" # 4. 계약 생성 curl -X POST "http://api.sam.kr/api/construction/contracts" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"테스트 계약","partner_id":1}' ``` ### 8.2 UI 테스트 체크리스트 ``` □ 페이지 접속 시 로딩 스피너 표시 □ 데이터 로딩 완료 후 목록 표시 □ 검색 기능 동작 □ 필터 기능 동작 □ 페이지네이션 동작 □ 상세 보기 동작 □ 생성 폼 동작 □ 수정 폼 동작 □ 삭제 확인 및 동작 □ 에러 발생 시 메시지 표시 ``` ### 8.3 에러 케이스 테스트 | 케이스 | 예상 동작 | 확인 방법 | |--------|----------|----------| | 네트워크 끊김 | 에러 메시지 표시 | 네트워크 탭에서 Offline 모드 | | 401 인증 오류 | 로그인 페이지 리다이렉트 | 토큰 만료 상태에서 접속 | | 404 데이터 없음 | "데이터 없음" 표시 | 존재하지 않는 ID 접근 | | 500 서버 오류 | 에러 메시지 표시 | API 강제 에러 발생 | --- ## 9. 세션 관리 ### 9.1 새 세션 시작 시 ```bash # 1. 메인 문서 읽기 (현재 진행 상태 확인) cat docs/plans/construction-api-integration-plan.md | head -30 # 2. "다음 작업" 확인 grep "다음 작업" docs/plans/construction-api-integration-plan.md # 3. 해당 서브 문서 읽기 cat docs/plans/sub/{다음작업}-plan.md # 4. 작업 시작 ``` ### 9.2 작업 중 체크포인트 | 시점 | 행동 | |------|------| | 작업 완료 시 | 메인 문서 "현재 진행 상태" 업데이트 | | 서브 작업 완료 시 | 서브 문서 상태 (⏳→✅) 업데이트 | | 컨펌 필요 시 | "컨펌 대기 목록"에 추가 | | 세션 종료 전 | 변경 이력에 기록 | ### 9.3 세션 종료 시 ```bash # 1. 진행 상태 업데이트 # - 📍 현재 진행 상태 섹션의 "마지막 완료 작업", "다음 작업" 수정 # - 대상 범위의 상태 아이콘 수정 (⏳ → ✅ 또는 🔄) # 2. 변경 이력 추가 # | 2026-01-08 | 1.1 | 계약관리 API 연동 완료 | contract/actions.ts | - | # 3. 커밋 (승인 후) git add . && git commit -m "feat: [시공사] 1.1 계약관리 - API 연동" ``` ### 9.4 컨텍스트 관리 (Serena 메모리) ```javascript // 세션 시작 시 로드 read_memory("construction-api-state") // 작업 중 저장 (30분마다 또는 주요 완료 시) write_memory("construction-api-state", { phase: "1.1", status: "진행중", lastCompleted: "Controller 생성", nextStep: "Service 로직 구현" }) // 컨텍스트 30% 이하 시 write_memory("construction-api-snapshot", "현재까지 진행 상황 요약...") ``` --- ## 10. 변경 이력 | 날짜 | 항목 | 변경 내용 | 파일 | 승인 | |------|------|----------|------|------| | 2026-01-08 | 초안 | 문서 초안 작성, 9개 컴포넌트 분석 | - | - | | 2026-01-08 | 보완 | 전제조건, 성공기준, 검증방법, 세션관리 추가 | - | - | | 2026-01-09 | 1.1 | 계약관리 API 연동 완료 (Backend + Frontend) | api/, react/ | ✅ | | 2026-01-09 | 1.2 | 인수인계보고서 Frontend API 연동 완료 | react/ | ✅ | | 2026-01-09 | 2.1 | 현장관리 API 연동 완료 (Backend + Frontend) | api/, react/ | ✅ | | 2026-01-09 | 2.2 | 구조검토관리 API 연동 완료 (Backend + Frontend) | api/, react/ | ✅ | | 2026-01-09 | 2.3 | 물량검토관리 제외 (Frontend/기획 미존재) | docs/ | ✅ | | 2026-01-09 | 3.1 | 카테고리관리 API 연동 완료 (HTTP 메서드 수정) | react/ | ✅ | | 2026-01-09 | 3.2 | 품목관리 API 연동 완료 (apiClient.delete body 지원 추가) | react/ | ✅ | | 2026-01-09 | 3.3 | 단가관리 Backend API 보완 (stats, bulkDestroy 추가) | api/ | ✅ | --- ## 11. 참고 문서 | 문서 | 경로 | 용도 | |------|------|------| | API 규칙 | `docs/standards/api-rules.md` | API 개발 표준 | | Swagger 가이드 | `docs/guides/swagger-guide.md` | API 문서화 | | 품질 체크리스트 | `docs/standards/quality-checklist.md` | 완료 전 점검 | | 빠른 시작 | `docs/quickstart/quick-start.md` | 환경 설정 | | 개발 명령어 | `docs/quickstart/dev-commands.md` | 자주 쓰는 명령어 | --- ## 12. 서브 문서 링크 | Phase | 문서 | 경로 | API 상태 | |-------|------|------|:--------:| | 1.1 | 계약관리 | [./sub/contract-plan.md](./sub/contract-plan.md) | ✅ 완료 | | 1.2 | 인수인계보고서 | [./sub/handover-report-plan.md](./sub/handover-report-plan.md) | ❌ 신규 | | 2.1 | 현장관리 | [./sub/site-management-plan.md](./sub/site-management-plan.md) | ⚠️ 확인필요 | | 2.2 | 구조검토관리 | [./sub/structure-review-plan.md](./sub/structure-review-plan.md) | ❌ 신규 | | 2.3 | 발주관리 | [./sub/order-management-plan.md](./sub/order-management-plan.md) | ❌ 신규 | | 3.1 | 카테고리관리 | [./sub/categories-plan.md](./sub/categories-plan.md) | ✅ 존재 | | 3.2 | 품목관리 | [./sub/items-plan.md](./sub/items-plan.md) | ❌ 신규 | | 3.3 | 단가관리 | [./sub/pricing-plan.md](./sub/pricing-plan.md) | ✅ 존재 | | 3.4 | 노임관리 | [./sub/labor-plan.md](./sub/labor-plan.md) | ❌ 신규 | --- ## 13. 자기완결성 점검 결과 ### 13.1 체크리스트 검증 | # | 검증 항목 | 상태 | 참조 섹션 | |---|----------|:----:|----------| | 1 | 작업 목적이 명확한가? | ✅ | 1.1 배경 | | 2 | 성공 기준이 정의되어 있는가? | ✅ | 7. 성공 기준 | | 3 | 작업 범위가 구체적인가? | ✅ | 2. 대상 범위 | | 4 | 의존성이 명시되어 있는가? | ✅ | 0. 전제 조건 | | 5 | 참고 파일 경로가 정확한가? | ✅ | 11. 참고 문서 (검증됨) | | 6 | 단계별 절차가 실행 가능한가? | ✅ | 4. 작업 절차 | | 7 | 검증 방법이 명시되어 있는가? | ✅ | 8. 검증 방법 | | 8 | 모호한 표현이 없는가? | ✅ | 구체적 명령어 포함 | ### 13.2 새 세션 시뮬레이션 테스트 | 질문 | 답변 가능 | 참조 섹션 | |------|:--------:|----------| | Q1. 이 작업의 목적은 무엇인가? | ✅ | 1.1 배경 | | Q2. 어디서부터 시작해야 하는가? | ✅ | 4.2 첫 번째 작업 시작점 | | Q3. 어떤 파일을 수정해야 하는가? | ✅ | 5.1 프로젝트 구조 + 서브 문서 | | Q4. 작업 완료 확인 방법은? | ✅ | 7. 성공 기준, 8. 검증 방법 | | Q5. 막혔을 때 참고 문서는? | ✅ | 11. 참고 문서 | **결과: 5/5 통과 → ✅ 자기완결성 확보** --- *이 문서는 /sc:plan 스킬로 생성되었습니다.* *보완일: 2026-01-08*