번호 자동 부여 대응 및 API 공통 처리 보강

This commit is contained in:
JiWoong Sul
2025-10-23 14:02:31 +09:00
parent 09c31b2503
commit 7e933a2dda
55 changed files with 948 additions and 586 deletions

View File

@@ -414,7 +414,6 @@
`POST /stock-transactions`
```json
{
"transaction_no": "TXN-2025-0001",
"transaction_type_id": 1,
"transaction_status_id": 1,
"warehouse_id": 1,
@@ -437,13 +436,14 @@
],
"customers": [],
"approval": {
"approval_no": "APP-2025-0001",
"requested_by_id": 7,
"note": "입고 결재"
}
}
```
응답은 생성된 트랜잭션 전체 정보를 반환하며, 라인·고객 식별자가 포함된다. `approval`
응답은 생성된 트랜잭션 전체 정보를 반환하며, 라인·고객 식별자가 포함된다. `transaction_no`
`approval.approval_no`는 요청 시 생략하며, 서버가 각각 `TRX-YYYYMMDDNNNN`,
`APP-YYYYMMDDNNNN` 패턴으로 생성한 값을 응답에서 확인한다. `approval`
블록은 결재 생성에 필요한 정보를 담으며 생략할 수 없다.
### 4.2 목록 조회
@@ -455,7 +455,7 @@
"items": [
{
"id": 9001,
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"transaction_type": {
"id": 1,
"name": "입고"
@@ -519,7 +519,7 @@
],
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 1,
"name": "대기",
@@ -571,7 +571,7 @@
{
"data": {
"id": 9001,
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"transaction_type": {
"id": 1,
"name": "입고"
@@ -636,7 +636,7 @@
],
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 1,
"name": "대기",
@@ -861,7 +861,6 @@
```json
{
"transaction_id": 9001,
"approval_no": "APP-2025-0001",
"approval_status_id": 1,
"requested_by_id": 7,
"note": "입고 결재"
@@ -873,7 +872,7 @@
"data": {
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 1,
"name": "대기",
@@ -896,7 +895,7 @@
}
}
```
- `approval_no`활성 결재 기준으로 중복 불가하며(409 Conflict), 길이는 1~30자다.
- `approval_no`서버가 자동 발급하는 읽기 전용 필드로 `APP-YYYYMMDDNNNN` 형식을 따른다. 클라이언트는 필드를 전송하지 않으며, 중복 방지는 서버에서 처리된다.
- 최초 생성 시 `approval_status_id`에는 `대기` 상태 ID를 전달하고, 서버는 동일 상태로 저장한다.
- 단계나 이력이 존재하면 `data.approval.steps`, `data.approval.histories`가 함께 반환된다.
@@ -907,10 +906,10 @@
"items": [
{
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"transaction": {
"id": 9001,
"transaction_no": "TXN-2025-0001"
"transaction_no": "TRX-202511100001"
},
"status": {
"id": 1,
@@ -1006,10 +1005,10 @@
{
"data": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"transaction": {
"id": 9001,
"transaction_no": "TXN-2025-0001"
"transaction_no": "TRX-202511100001"
},
"status": {
"id": 1,
@@ -1159,7 +1158,7 @@
],
"approval": {
"id": 5001,
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"status": {
"id": 1,
"name": "대기",
@@ -1241,7 +1240,7 @@
],
"approval": {
"id": 5001,
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"status": {
"id": 1,
"name": "대기",
@@ -1274,7 +1273,7 @@
"data": {
"approval": {
"id": 5001,
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"status": {
"id": 2,
"name": "진행중",
@@ -1401,7 +1400,7 @@
"data": {
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 2,
"name": "진행중",
@@ -1463,7 +1462,7 @@
},
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 2,
"name": "진행중",
@@ -1537,7 +1536,7 @@
},
"approval": {
"id": 5001,
"approval_no": "APP-2025-0001",
"approval_no": "APP-202511100001",
"status": {
"id": 2,
"name": "진행중",
@@ -1790,7 +1789,7 @@
],
"recent_transactions": [
{
"transaction_no": "TXN-2025-0001",
"transaction_no": "TRX-202511100001",
"transaction_date": "2025-09-18",
"transaction_type": "입고",
"status_name": "상신",
@@ -1799,7 +1798,7 @@
],
"pending_approvals": [
{
"approval_no": "APP-2025-0005",
"approval_no": "APP-202511100005",
"title": "출고 결재",
"step_summary": "2단계/3단계 진행중",
"requested_at": "2025-09-17T03:00:00Z"