From ee350e758f89d9f663e44bcb1d2942d55284b093 Mon Sep 17 00:00:00 2001 From: Sangwook Park <41150708+sw0501@users.noreply.github.com> Date: Mon, 27 Nov 2023 00:43:45 +0900 Subject: [PATCH] Backend (#171) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat: 철도 관련 정보 엑셀 추가 철도 관련 정보 저장된 엑셀 파일 추가 및 MySQL 연결용 js 파일 추가 * Feat: API 추가 * Modify: VM 서버 올리기 위해서 빌드 코드 주석처리 빌드 코드 주석처리 및 창립제 발표 자료 추가 * Modify: Port 번호 변경 Port 번호 변경 * Modify: gitigonore 수정, GPS 데이터 삭제, 지하철 명 검색 API 추가 PPT 파일 gitignore 추가 GPS.json 파일 삭제 지하철 명 검색 시 해당 번호 및 철도 번호 추가 * Feat: DB 연결 코드 추가, 외부 접속용 cors 추가 MySQL 연결 코드 DBconnect.js 추가 외부 IP 접속용 cors 추가 * Feat: Test 파일 삭제 및 MySQL 연동 지하철 테스트 json 파일 및 test.js 파일 삭제 MySQL 연동 코드 작성 * Feat: package.json 추가 express, mysql, cors, path 모듈 추가 * Feat: Cors IP 추가 localhost:3000 Cors에 추가 * Feat: MySQL 연동 및 지하철 정보 API 추가 VM MySQL 연동 및 지하철 정보 API 추가 * Feat: 버스 도착 예정 시간 분/초 파싱 및 API 최신화 버스 도착 예정 시간 min / sec로 response에서 제공 사용하지 않는 API 및 수정된 URL로 REST API 최신화 지하철 역 선택 시 좌표 response 지하철 정보 배열로 response Fix: #42. #55, #62 * Modify: congestion 제거 response에서 congestion 값을 제공을 안해서 제거 * Modify: API 수정 및 SQL DUMP 파일 추가 API 수정 지하철역 Dump 파일 추가 * Modify: MySQL 한글 오류 수정 MySQL 'utf8mb4_0900_ai_ci' 오류 수정 * Test: MySQL 오류 확인 위해서 원상태로 복구 * Modify: .SQL 파일 헤더 추가 * Modify: .SQL 파일 헤더 변경 * Modify: .SQL 파일 헤더 변경 * Modify: .SQL 파일 헤더 변경 * Modify: .SQL 파일 헤더 변경 * Modify: Front 작업용 backend.js 수정 SQL 데이터 옮기는 건 추후에 작업: * Modify: VM용 쿼리문 구조 변경 * Feat: 휠체어 리프트 위치 API 추가 저상버스 도착 정보 주석처리 SQL문 VM용으로 수정 * Feat: 버스 타이머 기능 추가 Min, Sec 분할하여 제공 첫차, 막차, 분, 초 없는 예외 케이스 처리 * Feat: 휠체어리프트 이동동선, 엘리베이터 위치, 이동동선 API 추가 휠체어리프트 이동동선 API 추가 엘리베이터 위치 API 추가 엘리베이터 이동동선 API 추가 * Modify: VM test DB 사용 코드 변경 VM에 있는 'test' DB 데이터 사용 코드 변경 * Feat: TransferMove API 추가 환승역 이동동선 API 추가 환승역 아닌 경우 Error 코드 추가 * Modify: backend.js MySQL 테스트 코드 제거 backend.js MySQL 테스트 코드 제거 * Feat: Cors 서버 주소 추가 Cors 서버 주소 추가 * Feat: transferList, transferInfo, convenience API 구현 transferList 환승역 목록 제공 transferInfo 환승 이동 경로 제공 convenience 편의정보 시설 위치 및 상세정보 제공 * Modify: 휠체어리프트 이동경로별로 구분하여 response 휠체어리프트 이동경로별로 구분하여 response * Modify: 엘리베이터 이동경로 구분하여 response 엘리베이터 이동경로 구분하여 response * Modify: transferMove/transferList API 수정 transferMove/transferList API 환승 전 역 방면, 환승 후 역 방면 역 리스트 안내 * Fix: subway/transferMove/transferList 에러 수정 subway/transferMove/transferList 다른 철도의 같은 호선, 같은 역 코드를 지닌 지하철역 뜨지 않게 수정 * Fix: transferMove/transferInfo 에러 수정 transferMove/transferInfo 상행 하행 구분하여 전달 * Fix: error status code 변경 기존 404에서 500 으로 변경 * Fix: 환승 이동경로 API 변경 환승 이동경로 API 변경 * Fix: transferMove/transferInfo API 에러 수정 transferMove/transferInfo API 2호선 상행 하행 기준 다른 부분 수정 완료 * Modify: DB csv파일 UTF-8로 변경 DB csv파일 UTF-8로 변경하여 저장 * Feat: 엘리베이터 이동동선 추가 엘리베이터 이동동선 추가 및 NULL 에러 처리 * Fix: stationName API 오류 수정 stationName API 오류 수정 * Feat: 엘리베이터, 휠체어 리프트 이동동선 API 기능 추가 엘리베이터, 휠체어 리프트 이동동선 API 방면 알려주는 기능 추가 * Fix: ElevatorMove API 에러 수정 length-2인 이동 설명에서 ' 방면'을 기준으로 split하여 방면 response * Feat: SQL 변경 중 * CSV 파일 이름 수정 * Modify: cors 사용 취소 cors 사용 취소 * Test: sql 테스트 코드 * Modify: SQL 문 수정 * Fix: Attribute 한글로 변경 * Fix: 기타 API들 SQL 수정 * Fix: API SQL 수정 API SQL 수정 * Modify: server.js cors 오타 수정 * Modfiy: cors 옵션 적용 cors 옵션 적용 * Modify: 교통약자 도우미 테이블과 조인하여 목록 제공 * Fix: transferList API 오류 수정 * Feat: subway/stationInfo API 기능 추가 영어 이름 및 외부 코드 추가 response * Modify: liftMove API 수정 * Modify: liftMove API 수정 승강장 기준으로 direction 필요 * Add: image 폴더 및 docs 폴더 추가 image 폴더에 Readme.md에 사용할 이미지 추가 docs파일에 발표 자료 및 시연 영상 추가 * Modify: 발표자료 영상 제거 발표자료 영상 제거 * Modify: cors IP 수정 * Feat: TypeScript 환경설정 파일 추가 및 DB 수정 TypeScript 환경설정 파일 추가 DB 전체 입력 * Feat: 서버 포트 변경 * Feat: request 의존성 추가 * Feat: xml-js 의존성 추가 * Modify: package-lock.json 파일 conflict 수정 * Modify: package-lock.json conflict 수정 2 * Feat: DB 커넥션 방식 변경 * Modify: 프론트 빌드 파일 배포 * Feat: Typescript 변환 * Feat: TS 변환 및 CORS 추가 * Modify: Frontend PR 시 빌드 과정 추가 의존성 설치 및 빌드 과정 추가 * Feat: CI/CD 수정 올바른 경로의 git 에서 변경사항 가져오도록 수정 * Modify: gitignore 수정 KEY 디렉토리 추가 * Modify: CI/CD 수정 git token 사용하지 않고 사용하는 것으로 수정 * Test: Github Action PR 분기점 테스트 * Test: yml 수정 * Feat: json 파일 디렉토리 경로 수정 * Modify: CI/CD 롤백 * Modify: yml 파일 수정 * Fix: 오타 수정 * Feat: Typescript 변환 중 * Feat: Bus router TS 변환 완료 * Feat: interface 추가 및 Bus 라우터 TS 변환 완료 * Feat: Bus, Subway 라우터 Typescript 변환 * 프로젝트 코드 JS -> TS로 변경 * Feat: sendFile 경로 변경 * Feat: CI/CD 폴더 변경 * Feat: ts npm 의존성 추가 * Feat: TS 코드 수정 및 yml 파일 변경 * Modify: yml 파일 변경 * confilct TEST * Modify: yml 수정 * Feat: CI/CD PR 분기점 분류 적용 * Modify: yml 파일 수정 * Modify: yml 파일 수정 * Modify: yml 파일 수정 * Modify: yml 파일 수정 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 파일 * Modify: yml 수정 * Modify: yml 수정 * Modify: yml 수정 * Feat: Navigation API 개발 중 * Test: CI/CD 테스트 * Modify: CI/CD passpharse 추가 * Feat: Subway Navigation API 개발 중 * Feat 지하철 Navigation API 개발 중 * Modify: 커밋 변경사항 저장 * Fix: 환승이동경로 타입 오류 수정 --------- Co-authored-by: 박규태 <79373803+KyuTae98@users.noreply.github.com> --- BackendJS/BackendTS/routes/navigation.js | 8 ++- BackendJS/BackendTS/routes/subwaydata.js | 56 ++++++++++------- BackendTS/routes/navigation.ts | 11 +++- BackendTS/routes/subwaydata.ts | 63 ++++++++++--------- interfaces/Navigation/navigation.interface.ts | 2 +- interfaces/Subway/subway.interface.ts | 2 +- 6 files changed, 83 insertions(+), 59 deletions(-) diff --git a/BackendJS/BackendTS/routes/navigation.js b/BackendJS/BackendTS/routes/navigation.js index 5065a33..70959d6 100644 --- a/BackendJS/BackendTS/routes/navigation.js +++ b/BackendJS/BackendTS/routes/navigation.js @@ -58,6 +58,7 @@ router.get('/bybus/:startX/:startY/:endX/:endY', (req, res) => __awaiter(void 0, const parseJSON = xml_js_1.default.xml2json(body); const navigationList = JSON.parse(parseJSON).elements[0].elements[2].elements; const navigationInfo = []; + console.log(parseJSON); navigationList.forEach((info) => { const tempInfo = { distance: "", @@ -148,6 +149,7 @@ router.get('/bysubway/:startX/:startY/:endX/:endY', (req, res) => __awaiter(void }, function (error, response, body) { return __awaiter(this, void 0, void 0, function* () { const parseJSON = xml_js_1.default.xml2json(body); + console.log(parseJSON); const navigationList = JSON.parse(parseJSON).elements[0].elements[2].elements; const navigationInfo = []; navigationList.forEach((info) => { @@ -170,9 +172,8 @@ router.get('/bysubway/:startX/:startY/:endX/:endY', (req, res) => __awaiter(void tempInfo.walkTime += Math.floor(dist / velocity); for (let i = 0; i < info.elements[1].elements.length / 10; i++) { const railLinkList = []; - console.log(JSON.stringify(info.elements[1].elements)); - for (let j = 0; j < info.elements[1].elements[i % 10 + 4].elements.length; j++) { - railLinkList.push(info.elements[1].elements[i % 10 + 4].elements[j].text); + for (let j = 0; j < info.elements[1].elements[i % 10 + 4].elements[0].elements.length; j++) { + railLinkList.push(info.elements[1].elements[i % 10 + 4].elements[0].elements[j].text); } tempInfo.pathList.push({ fid: info.elements[1].elements[i % 10].elements[0].text, @@ -246,6 +247,7 @@ router.get('/bybusNsubway/:startX/:startY/:endX/:endY', (req, res) => __awaiter( }, function (error, response, body) { return __awaiter(this, void 0, void 0, function* () { const parseJSON = xml_js_1.default.xml2json(body); + console.log(parseJSON); const navigationList = JSON.parse(parseJSON).elements[0].elements[2].elements; const navigationInfo = []; navigationList.forEach((info) => { diff --git a/BackendJS/BackendTS/routes/subwaydata.js b/BackendJS/BackendTS/routes/subwaydata.js index 9c1cc6b..1a99c1b 100644 --- a/BackendJS/BackendTS/routes/subwaydata.js +++ b/BackendJS/BackendTS/routes/subwaydata.js @@ -130,7 +130,11 @@ function getLiftPos(stCd, stNm, railCd, lnCd, callback) { method: 'GET' }, function (error, response, body) { const liftPosInfo = JSON.parse(body).body; - callback(liftPosInfo[0]); + if (liftPosInfo === undefined) { + callback(null); + } + else + callback(liftPosInfo[0]); }); } catch (e) { @@ -362,22 +366,22 @@ function getTransferInfo(stCd, stNm, railCd, lnCd, prev, chthTgtLn, chtnNextStin //환승역 방면이 상행선이라면 2, 4만 나옴 if (prevStinCd > parseInt(chtnNextStinCd)) { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "2") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 2) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "1") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 1) { transferInfo.push(parse[i]); } } //하행선인 경우 else { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "4") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 4) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "3") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 3) { transferInfo.push(parse[i]); } } @@ -386,22 +390,22 @@ function getTransferInfo(stCd, stNm, railCd, lnCd, prev, chthTgtLn, chtnNextStin //환승역 방면이 상행선이라면 1,3만 나옴 if (prevStinCd > parseInt(chtnNextStinCd)) { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "1") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 1) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "3") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 3) { transferInfo.push(parse[i]); } } //하행선인 경우 else { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "2") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 2) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "4") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 4) { transferInfo.push(parse[i]); } } @@ -491,20 +495,26 @@ router.get('/liftPos/:stCd/:stNm/:railCd/:lnCd', (req, res) => __awaiter(void 0, const railCd = req.params.railCd; const lnCd = req.params.lnCd; yield getLiftPos(stCd, stNm, railCd, lnCd, liftPosInfo => { - return res.status(200).json({ - "railOprIsttCd": liftPosInfo.railOprIsttCd, - "lnCd": liftPosInfo.lnCd, - "stinCd": liftPosInfo.stinCd, - "exitNo": liftPosInfo.exitNo, - "dtlLoc": liftPosInfo.dtlLoc, - "grndDvNmFr": liftPosInfo.grndDvNmFr, - "runStinFlorFr": liftPosInfo.runStinFlorFr, - "grndDvNmTo": liftPosInfo.grndDvNmTo, - "runStinFlorTo": liftPosInfo.runStinFlorTo, - "len": liftPosInfo.len, - "wd": liftPosInfo.wd, - "bndWgt": liftPosInfo.bndWgt - }); + //null인 경우 + if (liftPosInfo === null) { + return res.status(200).json([]); + } + else { + return res.status(200).json({ + "railOprIsttCd": liftPosInfo.railOprIsttCd, + "lnCd": liftPosInfo.lnCd, + "stinCd": liftPosInfo.stinCd, + "exitNo": liftPosInfo.exitNo, + "dtlLoc": liftPosInfo.dtlLoc, + "grndDvNmFr": liftPosInfo.grndDvNmFr, + "runStinFlorFr": liftPosInfo.runStinFlorFr, + "grndDvNmTo": liftPosInfo.grndDvNmTo, + "runStinFlorTo": liftPosInfo.runStinFlorTo, + "len": liftPosInfo.len, + "wd": liftPosInfo.wd, + "bndWgt": liftPosInfo.bndWgt + }); + } }); } catch (e) { diff --git a/BackendTS/routes/navigation.ts b/BackendTS/routes/navigation.ts index 3172095..f04b1bc 100644 --- a/BackendTS/routes/navigation.ts +++ b/BackendTS/routes/navigation.ts @@ -58,6 +58,7 @@ router.get('/bybus/:startX/:startY/:endX/:endY', async(req:Request, res:Response const navigationList:any = JSON.parse(parseJSON).elements[0].elements[2].elements; const navigationInfo:Array = []; + console.log(parseJSON); navigationList.forEach((info:any) => { const tempInfo:NavigationList = { distance: "", //총 이동 거리 @@ -170,6 +171,8 @@ router.get('/bysubway/:startX/:startY/:endX/:endY', async(req:Request,res:Respon const parseJSON:string = convert.xml2json(body); + console.log(parseJSON); + const navigationList:any = JSON.parse(parseJSON).elements[0].elements[2].elements; const navigationInfo:Array = []; @@ -197,9 +200,9 @@ router.get('/bysubway/:startX/:startY/:endX/:endY', async(req:Request,res:Respon for(let i:number=0;i = []; - console.log(JSON.stringify(info.elements[1].elements)); - for(let j:number = 0;j = []; diff --git a/BackendTS/routes/subwaydata.ts b/BackendTS/routes/subwaydata.ts index e747b77..fcef989 100644 --- a/BackendTS/routes/subwaydata.ts +++ b/BackendTS/routes/subwaydata.ts @@ -108,7 +108,7 @@ function getSubwayStationInfo(stCd:string, stNm:string, callback:(stationInfo:Su } } -function getLiftPos(stCd:string, stNm:string, railCd:string, lnCd:string, callback:(liftPosInfo:SubwayStationLiftPos)=>void) { +function getLiftPos(stCd:string, stNm:string, railCd:string, lnCd:string, callback:(liftPosInfo:SubwayStationLiftPos|null)=>void) { try { const url:string = 'https://openapi.kric.go.kr/openapi/vulnerableUserInfo/stationWheelchairLiftLocation'; @@ -122,9 +122,12 @@ function getLiftPos(stCd:string, stNm:string, railCd:string, lnCd:string, callba url: url + queryParams, method: 'GET' }, function (error:Error, response:any, body:any) { - const liftPosInfo:Array = JSON.parse(body).body; - callback(liftPosInfo[0]); + + if(liftPosInfo === undefined){ + callback(null); + } + else callback(liftPosInfo[0]); }); @@ -350,7 +353,6 @@ function getTransferList(stCd:string, stNm:string, railCd:string, lnCd:string, c } } - }); } @@ -406,33 +408,31 @@ function getTransferInfo(stCd:string, stNm:string, railCd:string, lnCd:string, p method: 'GET' }, function (error:Error, response:any, body:any) { const parse:Array = JSON.parse(body).body; - for (let i = 0; i < parse.length; i++) { //성수가 211 하행 //railCd로 비교 //2호선의 경우 상 하행이 반대 if (railCd === "S1" && lnCd === "2") { - //환승역 방면이 상행선이라면 2, 4만 나옴 if (prevStinCd > parseInt(chtnNextStinCd)) { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "2") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 2) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "1") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 1) { transferInfo.push(parse[i]); } } //하행선인 경우 else { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "4") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 4) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "3") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 3) { transferInfo.push(parse[i]); } } @@ -441,22 +441,22 @@ function getTransferInfo(stCd:string, stNm:string, railCd:string, lnCd:string, p //환승역 방면이 상행선이라면 1,3만 나옴 if (prevStinCd > parseInt(chtnNextStinCd)) { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "1") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 1) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "3") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 3) { transferInfo.push(parse[i]); } } //하행선인 경우 else { //출발 방면이 상행선이라면 - if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === "2") { + if (parseInt(stCd) > parseInt(prev) && parse[i].mvPathMgNo === 2) { transferInfo.push(parse[i]); } //출발 방면이 하행선이라면 - else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === "4") { + else if (parseInt(stCd) < parseInt(prev) && parse[i].mvPathMgNo === 4) { transferInfo.push(parse[i]); } } @@ -567,20 +567,27 @@ router.get('/liftPos/:stCd/:stNm/:railCd/:lnCd', async (req:Request, res:Respons await getLiftPos(stCd, stNm, railCd, lnCd, liftPosInfo => { - return res.status(200).json({ - "railOprIsttCd": liftPosInfo.railOprIsttCd, - "lnCd": liftPosInfo.lnCd, - "stinCd": liftPosInfo.stinCd, - "exitNo": liftPosInfo.exitNo, - "dtlLoc": liftPosInfo.dtlLoc, - "grndDvNmFr": liftPosInfo.grndDvNmFr, - "runStinFlorFr": liftPosInfo.runStinFlorFr, - "grndDvNmTo": liftPosInfo.grndDvNmTo, - "runStinFlorTo": liftPosInfo.runStinFlorTo, - "len": liftPosInfo.len, - "wd": liftPosInfo.wd, - "bndWgt": liftPosInfo.bndWgt - }); + //null인 경우 + if(liftPosInfo===null){ + return res.status(200).json([]); + } + + else{ + return res.status(200).json({ + "railOprIsttCd": liftPosInfo.railOprIsttCd, + "lnCd": liftPosInfo.lnCd, + "stinCd": liftPosInfo.stinCd, + "exitNo": liftPosInfo.exitNo, + "dtlLoc": liftPosInfo.dtlLoc, + "grndDvNmFr": liftPosInfo.grndDvNmFr, + "runStinFlorFr": liftPosInfo.runStinFlorFr, + "grndDvNmTo": liftPosInfo.grndDvNmTo, + "runStinFlorTo": liftPosInfo.runStinFlorTo, + "len": liftPosInfo.len, + "wd": liftPosInfo.wd, + "bndWgt": liftPosInfo.bndWgt + }); + } }) diff --git a/interfaces/Navigation/navigation.interface.ts b/interfaces/Navigation/navigation.interface.ts index b05c447..a6dd0af 100644 --- a/interfaces/Navigation/navigation.interface.ts +++ b/interfaces/Navigation/navigation.interface.ts @@ -12,7 +12,7 @@ export interface BusPathList { } export interface SubwayPathList { - routeNm: string, + routeNm: string, //호선 fid: string, fname: string, fx: string, diff --git a/interfaces/Subway/subway.interface.ts b/interfaces/Subway/subway.interface.ts index 88d6b64..49839d3 100644 --- a/interfaces/Subway/subway.interface.ts +++ b/interfaces/Subway/subway.interface.ts @@ -120,7 +120,7 @@ export interface SubwayStationTransferMoveList { elvtTpCd: string, imgPath: string, mvContDtl: string, - mvPathMgNo: string, + mvPathMgNo: number, stMovePath: string }