fix: 가맹몰 등록 요청을 DB 저장으로 바뀐 백엔드(1703ce8)에 맞춘다
업종 선택지는 FRCS_TPBIZ_CD(2자리)만 — 4자리 FRCS_CD는 업종+업태를 이어 붙인 표시용이라 저장값이 아니다. 연락처는 BizPlay 행처럼 숫자만 보낸다. 백엔드가 BizPlay 위임을 끊고 TB_COM_VOUCHER에 직접 넣게 된 것과 수정 VO에 frcsNo가 빠진 결함을 문서에 적는다. Co-Authored-By: Claude Fable 5.1
@cda1115d8aa7f3d84968242ec5e0e327a83ad36e
--- app/(protected)/(basic)/system/merchants/_components/merchant-form-modal.tsx
+++ app/(protected)/(basic)/system/merchants/_components/merchant-form-modal.tsx
... | ... | @@ -187,7 +187,7 @@ |
| 187 | 187 |
size="md" |
| 188 | 188 |
label="업종" |
| 189 | 189 |
requirement="required" |
| 190 |
- options={codeTables.business.map((code) => ({ value: code.code, label: code.label }))}
|
|
| 190 |
+ options={codeTables.businessOptions.map((code) => ({ value: code.code, label: code.label }))}
|
|
| 191 | 191 |
value={categoryCode}
|
| 192 | 192 |
onValueChange={setCategoryCode}
|
| 193 | 193 |
placeholder="선택" |
--- app/(protected)/(basic)/system/merchants/page.tsx
+++ app/(protected)/(basic)/system/merchants/page.tsx
... | ... | @@ -33,6 +33,7 @@ |
| 33 | 33 |
const codeTables: MerchantCodeTables = {
|
| 34 | 34 |
// 앞쪽 표가 먼저 맞는다 — 2자리 값은 FRCS_TPBIZ_CD에서, 4자리 값은 FRCS_CD에서 이름을 찾는다. |
| 35 | 35 |
business: [...business, ...businessDetail], |
| 36 |
+ businessOptions: business, |
|
| 36 | 37 |
businessStatus, |
| 37 | 38 |
division, |
| 38 | 39 |
bank, |
--- lib/data/repositories/merchant-repository.ts
+++ lib/data/repositories/merchant-repository.ts
... | ... | @@ -14,14 +14,17 @@ |
| 14 | 14 |
* |
| 15 | 15 |
* ``` |
| 16 | 16 |
* GET /api/v1/mngr/voc/pagination searchCondition 1=가맹점명 2=사업자번호 3=상세주소 |
| 17 |
- * POST /api/v1/mngr/voc @RequestBody MngrVocInsertReqVo |
|
| 18 |
- * PUT /api/v1/mngr/voc @RequestBody MngrVocUpdateReqVo (BaseVo + chgDvCd) |
|
| 17 |
+ * POST /api/v1/mngr/voc @RequestBody MngrVocInsertReqVo → TB_COM_VOUCHER INSERT (1703ce8) |
|
| 18 |
+ * PUT /api/v1/mngr/voc @RequestBody MngrVocUpdateReqVo → UPDATE … WHERE FRCS_NO |
|
| 19 | 19 |
* ``` |
| 20 | 20 |
* |
| 21 |
+ * 등록은 1703ce8부터 우리 DB에 바로 들어간다 — 코드는 서버가 `TEST` + 8자리로 채번하고 좌표는 카카오 |
|
| 22 |
+ * 지오코딩으로 채운다. 응답에 코드가 없어(`data: null`) 호출부는 목록에서 이름·연락처로 찾는다. |
|
| 23 |
+ * 예금주·은행·계좌는 `MngrVocVo`에 없어 버려진다(테이블에 컬럼 없음). |
|
| 24 |
+ * |
|
| 21 | 25 |
* ⚠️ 백엔드 현황(보고함) |
| 22 |
- * 1. 등록·수정은 아직 BizPlay(웹캐시) 가맹점 API로 위임된다(1c7b0e0). 우리 DB에 저장하도록 |
|
| 23 |
- * 바뀔 예정(사용자 공지)이라 요청은 그 VO 그대로 보내고, 응답에서 `frcsNo`가 오면 읽고 없으면 |
|
| 24 |
- * 가맹점 목록에서 찾는다. 위임 상태에선 새 가맹점이 다음 날 동기화 뒤에야 목록에 나타난다. |
|
| 26 |
+ * 1. 수정 요청 VO(`MngrVocUpdateReqVo`)에 `frcsNo`가 없어 UPDATE가 `WHERE FRCS_NO = NULL`로 아무 행도 |
|
| 27 |
+ * 바꾸지 않고 성공으로 답한다 — VO에 `frcsNo` 한 줄이 필요하다. 프론트는 이미 싣고 있다. |
|
| 25 | 28 |
* 2. **삭제·단건 조회 API가 없다.** |
| 26 | 29 |
* 3. 검색 필터가 어긋난다 — 업종 검색 파라미터는 `searchFrcsTpbizCd`인데 SQL은 `FRCS_DV_CD`를 |
| 27 | 30 |
* 비교하고, 저장은 `frcsTpbizCd`로 받는다. 저장한 업종으로 검색이 걸리지 않는다. |
... | ... | @@ -179,7 +182,8 @@ |
| 179 | 182 |
return {
|
| 180 | 183 |
frcsNm: values.name, |
| 181 | 184 |
rprsvNm: values.ownerName, |
| 182 |
- rprsvTelno: values.phoneNumber, |
|
| 185 |
+ // BizPlay가 채운 행과 같은 모양(숫자만)으로 — 화면은 formatPhoneNumber가 다시 붙인다. |
|
| 186 |
+ rprsvTelno: values.phoneNumber.replace(/-/g, ''), |
|
| 183 | 187 |
brno: values.businessNumber.replace(/-/g, ''), |
| 184 | 188 |
bankDpstrNm: values.bankHolderName, |
| 185 | 189 |
dpstBankCd: values.bankCode, |
--- lib/domain/merchant.ts
+++ lib/domain/merchant.ts
... | ... | @@ -36,8 +36,10 @@ |
| 36 | 36 |
|
| 37 | 37 |
/** 가맹몰 등록·수정 폼이 쓰는 코드표 넷 — 화면이 한 번에 받아 모달까지 내려보낸다. */ |
| 38 | 38 |
export type MerchantCodeTables = {
|
| 39 |
- /** 업종(`FRCS_TPBIZ_CD` 다음 `FRCS_CD`). */ |
|
| 39 |
+ /** 업종 이름 찾기용(`FRCS_TPBIZ_CD` 다음 `FRCS_CD`) — 옛 행의 4자리 값까지 이름을 낸다. */ |
|
| 40 | 40 |
business: CommonCode[]; |
| 41 |
+ /** 업종 선택지 — `FRCS_TPBIZ_CD`(2자리)만. 4자리 `FRCS_CD`는 업종+업태를 이어 붙인 것이라 저장값이 아니다. */ |
|
| 42 |
+ businessOptions: CommonCode[]; |
|
| 41 | 43 |
businessStatus: CommonCode[]; |
| 42 | 44 |
division: CommonCode[]; |
| 43 | 45 |
bank: CommonCode[]; |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?