@things-factory/integration-juso 10.0.0-beta.95 → 10.0.0-beta.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/engine/task/address/resolve.d.ts +4 -0
- package/dist-server/engine/task/address/resolve.js +9 -1
- package/dist-server/engine/task/address/resolve.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/server/engine/task/address/resolve.ts +10 -1
|
@@ -22,6 +22,8 @@ declare namespace JusoResolveAddressTask {
|
|
|
22
22
|
name: string;
|
|
23
23
|
label: string;
|
|
24
24
|
placeholder: string;
|
|
25
|
+
description: string;
|
|
26
|
+
useDomainAttribute: boolean;
|
|
25
27
|
property?: undefined;
|
|
26
28
|
} | {
|
|
27
29
|
type: string;
|
|
@@ -34,6 +36,8 @@ declare namespace JusoResolveAddressTask {
|
|
|
34
36
|
}[];
|
|
35
37
|
};
|
|
36
38
|
placeholder?: undefined;
|
|
39
|
+
description?: undefined;
|
|
40
|
+
useDomainAttribute?: undefined;
|
|
37
41
|
})[];
|
|
38
42
|
var help: string;
|
|
39
43
|
}
|
|
@@ -84,7 +84,15 @@ function mapToResolvedAddress(item) {
|
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
JusoResolveAddressTask.parameterSpec = [
|
|
87
|
-
{
|
|
87
|
+
{
|
|
88
|
+
type: 'string',
|
|
89
|
+
name: 'query',
|
|
90
|
+
label: 'label.address-query',
|
|
91
|
+
placeholder: '예) 서울특별시 강남구 테헤란로 223',
|
|
92
|
+
description: '검색할 주소 문자열 (도로명/지번). 도메인 EnvVar `Step::<scenario>::<step>::query` 로 ' +
|
|
93
|
+
'프로젝트별 주소 override 가능. 시나리오 변수도 사용 가능 (예: `${variables.address}`).',
|
|
94
|
+
useDomainAttribute: true
|
|
95
|
+
},
|
|
88
96
|
{
|
|
89
97
|
type: 'select',
|
|
90
98
|
name: 'pickFirst',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../server/engine/task/address/resolve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../server/engine/task/address/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionManager, Context, TaskRegistry, evaluateTemplate } from '@things-factory/integration-base'\n\nimport { JusoConnectionInstance } from '../../connector/juso-connector'\nimport { JusoItem, ResolvedAddress } from '../../types'\n\n/**\n * 도로명/지번 주소 → 표준 식별자 (PNU 5요소 + 법정동코드 + 우편번호) 변환 태스크.\n *\n * 다른 백엔드 (VWorld 등) 가 이 task 와 **같은 출력 형태(`ResolvedAddress`)** 를 반환하면\n * 소비자 시나리오는 백엔드 교체 시 매핑 변경이 필요 없도록 설계됨.\n *\n * 입력:\n * - `query` : 검색할 주소 문자열 (도로명 또는 지번 모두 가능)\n * - `pickFirst` : 다수 매칭 시 첫 결과 선택 (기본 true). false 면 결과가 둘 이상일 때 에러.\n *\n * 출력 (`data`):\n * - `ResolvedAddress` (단건). 매칭 0건이면 에러.\n */\nasync function JusoResolveAddressTask(step, context: Context): Promise<{ data: ResolvedAddress }> {\n const { connection: connectionName, params } = step\n const { domain, user, data, variables, lng, logger } = context\n\n const instance: JusoConnectionInstance = await ConnectionManager.getConnectionInstanceByName(\n domain,\n connectionName\n )\n if (!instance?.client) {\n throw new Error(`juso connection '${connectionName}' is not established.`)\n }\n\n const scope = { domain, user, lng, data, variables, console }\n const evalString = (value: string | undefined) => {\n if (value === undefined || value === null || value === '') return undefined\n try {\n return evaluateTemplate(String(value), scope)\n } catch (err) {\n throw new Error(`juso-resolve-address: failed to evaluate parameter: ${(err as Error).message}`)\n }\n }\n\n const query = evalString(params.query)\n if (!query) {\n throw new Error('juso-resolve-address: query is required (address string).')\n }\n\n const pickFirst = params.pickFirst === undefined ? true : Boolean(params.pickFirst)\n\n logger?.info?.(`[juso] search keyword='${query}'`)\n\n const items = await instance.client.search({ keyword: query, countPerPage: pickFirst ? 1 : 10 })\n\n if (items.length === 0) {\n throw new Error(`juso-resolve-address: no match for '${query}'. 도로명/지번 표기가 정확한지 확인.`)\n }\n if (!pickFirst && items.length > 1) {\n throw new Error(\n `juso-resolve-address: '${query}' 매칭 ${items.length}건. pickFirst=true 로 강제 선택 또는 query 더 구체적으로 입력.`\n )\n }\n\n const resolved = mapToResolvedAddress(items[0])\n\n logger?.info?.(\n `[juso] resolved → admCd=${resolved.admCd} pnu=${resolved.pnu.sigunguCd}-${resolved.pnu.bjdongCd}-${resolved.pnu.platGbCd}-${resolved.pnu.bun}-${resolved.pnu.ji}`\n )\n\n return { data: resolved }\n}\n\n/**\n * juso 단일 결과 → 표준 ResolvedAddress.\n *\n * 매핑 규칙:\n * - sigunguCd = admCd[0..4], bjdongCd = admCd[5..9]\n * - platGbCd = mtYn === '1' ? '1' : '0' (산 지번 여부)\n * - bun = lnbrMnnm, ji = lnbrSlno\n * - 좌표는 juso 응답에 없으므로 undefined\n */\nexport function mapToResolvedAddress(item: JusoItem): ResolvedAddress {\n const admCd = (item.admCd || '').padEnd(10, '0').slice(0, 10)\n const sigunguCd = admCd.slice(0, 5)\n const bjdongCd = admCd.slice(5, 10)\n const platGbCd = item.mtYn === '1' ? '1' : '0'\n const bun = String(item.lnbrMnnm ?? '').replace(/^0+/, '') || '0'\n const ji = String(item.lnbrSlno ?? '').replace(/^0+/, '') || '0'\n\n return {\n address: {\n road: item.roadAddrPart1 || item.roadAddr,\n jibun: item.jibunAddr,\n buildingName: item.bdNm || undefined,\n siNm: item.siNm,\n sggNm: item.sggNm,\n emdNm: item.emdNm\n },\n pnu: { sigunguCd, bjdongCd, platGbCd, bun, ji },\n admCd,\n bdMgtSn: item.bdMgtSn,\n rnMgtSn: item.rnMgtSn,\n zipNo: item.zipNo,\n raw: item\n }\n}\n\nJusoResolveAddressTask.parameterSpec = [\n {\n type: 'string',\n name: 'query',\n label: 'label.address-query',\n placeholder: '예) 서울특별시 강남구 테헤란로 223',\n description:\n '검색할 주소 문자열 (도로명/지번). 도메인 EnvVar `Step::<scenario>::<step>::query` 로 ' +\n '프로젝트별 주소 override 가능. 시나리오 변수도 사용 가능 (예: `${variables.address}`).',\n useDomainAttribute: true\n },\n {\n type: 'select',\n name: 'pickFirst',\n label: 'label.pick-first',\n property: {\n options: [\n { value: 'true', display: '첫 결과 자동 선택' },\n { value: 'false', display: '다중 매칭 시 에러' }\n ]\n }\n }\n]\n\nJusoResolveAddressTask.help = 'integration/task/juso-resolve-address'\n\nTaskRegistry.registerTaskHandler('juso-resolve-address', JusoResolveAddressTask)\n\nexport default JusoResolveAddressTask\n"]}
|