feat: 매출/매입 관리 API 구현

- 매출(Sale) 및 매입(Purchase) CRUD API 구현
- 문서번호 자동 생성 (SL/PU + YYYYMMDD + 시퀀스)
- 상태 관리 (draft → confirmed → invoiced)
- 확정(confirm) 및 요약(summary) 기능 추가
- BelongsToTenant, SoftDeletes 적용
- Swagger API 문서 작성 완료

추가된 파일:
- 마이그레이션: sales, purchases 테이블
- 모델: Sale, Purchase
- 서비스: SaleService, PurchaseService
- 컨트롤러: SaleController, PurchaseController
- FormRequest: Store/Update 4개
- Swagger: SaleApi.php, PurchaseApi.php

API 엔드포인트 (14개):
- GET/POST /v1/sales, /v1/purchases
- GET/PUT/DELETE /v1/{sales,purchases}/{id}
- POST /v1/{sales,purchases}/{id}/confirm
- GET /v1/{sales,purchases}/summary
This commit is contained in:
2025-12-17 22:14:48 +09:00
parent 0eb9fb8501
commit cbed92a95c
16 changed files with 2022 additions and 10 deletions

View File

@@ -1,5 +1,102 @@
# SAM API 작업 현황
## 2025-12-17 (화) - 매출/매입 관리 API 개발
### 작업 목표
- `docs/plans/erp-api-development-plan.md` Phase 1의 2.5 매출/매입 관리
- 매출(Sale) 및 매입(Purchase) CRUD API 구현
- 확정(confirm) 기능 및 요약(summary) 조회 기능 포함
### 생성된 마이그레이션 (2개)
| 파일명 | 설명 |
|--------|------|
| `2025_12_17_100001_create_sales_table.php` | 매출 테이블 (sale_number, sale_date, client_id, 금액, 상태) |
| `2025_12_17_100002_create_purchases_table.php` | 매입 테이블 (purchase_number, purchase_date, client_id, 금액, 상태) |
### 생성된 모델 (2개)
**app/Models/Tenants/Sale.php:**
- 매출 모델 (BelongsToTenant, SoftDeletes)
- 상태: draft → confirmed → invoiced
- Relations: client(), deposit(), creator()
- Methods: canConfirm(), canEdit(), canDelete()
**app/Models/Tenants/Purchase.php:**
- 매입 모델 (BelongsToTenant, SoftDeletes)
- 상태: draft → confirmed
- Relations: client(), withdrawal(), creator()
- Methods: canConfirm(), canEdit(), canDelete()
### 생성된 서비스 (2개)
**app/Services/SaleService.php:**
- CRUD, confirm(), summary()
- 문서번호 자동 생성: SL{YYYYMMDD}{0001}
- 상태 검증 (수정/삭제는 draft만 가능)
**app/Services/PurchaseService.php:**
- CRUD, confirm(), summary()
- 문서번호 자동 생성: PU{YYYYMMDD}{0001}
- 상태 검증 (수정/삭제는 draft만 가능)
### 생성된 FormRequest (4개)
| 파일 | 설명 |
|------|------|
| `app/Http/Requests/V1/Sale/StoreSaleRequest.php` | 매출 등록 검증 |
| `app/Http/Requests/V1/Sale/UpdateSaleRequest.php` | 매출 수정 검증 |
| `app/Http/Requests/V1/Purchase/StorePurchaseRequest.php` | 매입 등록 검증 |
| `app/Http/Requests/V1/Purchase/UpdatePurchaseRequest.php` | 매입 수정 검증 |
### 생성된 컨트롤러 (2개)
| 파일 | 엔드포인트 |
|------|-----------|
| `SaleController.php` | index, store, show, update, destroy, confirm, summary |
| `PurchaseController.php` | index, store, show, update, destroy, confirm, summary |
### 수정된 파일
**routes/api.php:**
- Sales 라우트 그룹 추가 (7개 라우트)
- Purchases 라우트 그룹 추가 (7개 라우트)
### 생성된 Swagger 문서 (2개)
| 파일 | 설명 |
|------|------|
| `app/Swagger/v1/SaleApi.php` | 매출 API 문서 (전체 엔드포인트) |
| `app/Swagger/v1/PurchaseApi.php` | 매입 API 문서 (전체 엔드포인트) |
### API 엔드포인트
**매출 API (Sales):**
- `GET /api/v1/sales` - 목록 조회
- `POST /api/v1/sales` - 등록
- `GET /api/v1/sales/{id}` - 상세 조회
- `PUT /api/v1/sales/{id}` - 수정
- `DELETE /api/v1/sales/{id}` - 삭제
- `POST /api/v1/sales/{id}/confirm` - 확정
- `GET /api/v1/sales/summary` - 요약
**매입 API (Purchases):**
- `GET /api/v1/purchases` - 목록 조회
- `POST /api/v1/purchases` - 등록
- `GET /api/v1/purchases/{id}` - 상세 조회
- `PUT /api/v1/purchases/{id}` - 수정
- `DELETE /api/v1/purchases/{id}` - 삭제
- `POST /api/v1/purchases/{id}/confirm` - 확정
- `GET /api/v1/purchases/summary` - 요약
### 검증 완료
- ✅ Pint 스타일 검사 통과
- ✅ 라우트 등록 확인 (14개)
- ✅ 마이그레이션 실행 성공
- ✅ Swagger 문서 생성 완료
---
## 2025-12-13 (금) - Items 테이블 통합 마이그레이션 작성
### 작업 목표