From 4094ce3b34fa2b6fdb4a38e5ea66838daa7a3472 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A0=EC=8A=B9=EC=9D=B8?=
<144124353+seung-in-Yoo@users.noreply.github.com>
Date: Thu, 14 Aug 2025 17:40:00 +0900
Subject: [PATCH 01/12] Create README.md
---
README.md | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 184 insertions(+)
create mode 100644 README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cea91bb
--- /dev/null
+++ b/README.md
@@ -0,0 +1,184 @@
+# Wayble๐๏ธ
+
+
+**์ฌ์ฉ์๋ฅผ ์ํ ๋ง์ถคํ ๋ฐฐ๋ฆฌ์ดํ๋ฆฌ ์๋น์ค Wayble**
+
+> ๋ชจ๋์ ํธ๋ฆฌํ ์ด๋์ ์ํ ๋ง์ถคํ ๊ฒฝ๋ก ํ์ ๋ฐ ์ฅ์ ์ถ์ฒ ์๋น์ค
+> ์ฅ์ ์ ํ๋ณยท์ด๋ ์๋จ๋ณ ์ต์ ํ๋ ๊ฒฝ๋ก ์๋ด์ ์ ๊ทผ์ฑ ์ ๋ณด ๊ณต์ ํ๋ซํผ, Wayble์์ ๋ง๋๋ณด์ธ์!
+
+
+
+
+### [๐ ๏ธWayble ์๋น์ค ๋งํฌ ๋ฐ๋ก๊ฐ๊ธฐ](https://wayble.site)
+### [๐ฌWayble ๋
ธ์
๋งํฌ ๋ฐ๋ก๊ฐ๊ธฐ](https://www.notion.so/wayble-20475cf0b87b806d9473feb579ab23e0)
+
+### ๐ Content
+- [๐ ํ ์๊ฐ](#ํ-์๊ฐ)
+- [๐ ๊ธฐ์ ์คํ](#๊ธฐ์ -์คํ)
+- [๐ ์๋น์ค ๊ณ ์ ๋ฐฐ๊ฒฝ](#์๋น์ค-๊ณ ์-๋ฐฐ๊ฒฝ)
+- [๐ ์ฃผ์ ๊ธฐ๋ฅ](#์ฃผ์-๊ธฐ๋ฅ)
+- [๐ ์์ธ ๊ธฐ๋ฅ](#์์ธ-๊ธฐ๋ฅ)
+- [๐ BE ํด๋ ๊ตฌ์กฐ](#BE-ํด๋-๊ตฌ์กฐ)
+- [๐ BE ์์คํ
๊ตฌ์ฑ๋](#BE-์์คํ
-๊ตฌ์ฑ)
+- [๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ](#๋ฐ์ดํฐ๋ฒ ์ด์ค-๊ตฌ์กฐ)
+- [๐ api ๋ช
์ธ](#api-๋ช
์ธ)
+
+
+
+
+
+
+## ๐ ํ ์๊ฐ
+> Team
+> ๊ธฐ์น๋ฏผ ์ํจ์ธ ์ ์น์ธ ์ด์์ค ์ฃผ์ ๋น
+
+
+| ๊ธฐ์น๋ฏผ (Lead) | ์ํจ์ธ | ์ ์น์ธ | ์ด์์ค | ์ฃผ์ ๋น |
+| ---------------------------------------- | ------------------------------------ | -------------------------------------- | ------------------------------------------------ | -------------------------------------- |
+|  |  || | 
+| BE | BE | BE | BE | BE |
+| [@KiSeungMin](https://github.com/KiSeungMin) |[@hyoinYang](https://github.com/hyoinYang)|[@seung-in-Yoo](https://github.com/seung-in-Yoo) | [@wonjun-lee-fcwj245](https://github.com/wonjun-lee-fcwj245) |[@zyovn](https://github.com/zyovn) |
+
+
+
+## ๐ ๊ธฐ์ ์คํ
+
+| Category | Stack |
+| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Framework / Runtime |   |
+| Programming Language |  |
+| Database / Search |    |
+| Infrastructure |      |
+| API / Data |   |
+| Authentication |  |
+| CI/CD |  |
+| Version Control |   |
+
+
+
+## ๐ ์๋น์ค ๊ณ ์ ๋ฐฐ๊ฒฝ
+### ๐ ํ๋ก์ ํธ ๊ฐ์
+
+WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์, ์ ๊ทผ์ฑ ํํฐ ๊ธฐ๋ฐ ์ฅ์ ์ถ์ฒ, ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ๊ณต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐฐ๋ฆฌ์ดํ๋ฆฌ ์ง๋ ์๋น์ค์
๋๋ค.
+์ฌ์ฉ์์ ์ฅ์ ์ ํ๊ณผ ์ด๋ ์๋จ ์ค์ ์ ๋ฐ๋ผ ์ต์ ํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ดํ๊ณ , ๋๊ตฌ๋ ์ ๊ทผ์ฑ ์ ๋ณด๋ฅผ ๋ฑ๋กยทํ์ธํ์ฌ ๋ชจ๋์ ์ด๋๊ถ์ ๋ณด์ฅํฉ๋๋ค.
+
+### ๐ฆ ๊ธฐํ์ ์์
+์ ์ฅ์ ์ธ์ ์ฃผ๋ณ์์ ์์ฃผ ๋ณด์ด์ง ์์๊น?
+๊ตํต์๋จ ์ด์ฉ์ ์ด๋ ค์
+์ถฉ๋ถํ ๋ณด์ฅ๋์ง ์๋ ์ํ ์ ๊ทผ์ฑ
+๋ถ์กฑํ ์ด๋ ํธ์ ์๋น์ค
+์ฅ์ ์ธ ์ธํฐ๋ทฐ์์ ๋์จ ๋ชฉ์๋ฆฌ
+
+> "๋งค์ผ ๋๊ฐ์ ์๋น์ ๊ฐ์.",
+> "ํ๋ฃจ๊ฐ ๊ณํ๋๋ก ๋์ง ์์์.",
+> "์๋ฆฌ๋ฒ ์ดํฐ ์์น ์ ๋ณด๊ฐ ๋ถ์ ํํด์ ์ด๋์ด ํ๋ค์ด์."
+
+๊ธฐ์กด ์ง๋ ์๋น์ค์๋ ์๋ฆฌ๋ฒ ์ดํฐยท๊ฒฝ์ฌ๋กยท์ฅ์ ์ธ ํ์ฅ์ค ๋ฑ ์ฅ์ ์ธ๋ค์ ์ํ ํ์คํ ์ ๋ณด๊ฐ ๋ถ์ถฉ๋ถํ๊ณ ,
+์ฅ์ ์ ํ๋ณ ๊ฒฝ๋ก ์๋ด, ์ฅ์ ์ธ๋ค๋ง์ ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ๊ณต์ ๊ธฐ๋ฅ๋ฑ ํธ์์ฑ์ด ์ ๊ณต๋์ง ์์ต๋๋ค.
+
+### ๐ก ์๋น์ค ์๊ฐ
+
+**WAYBLE์**
+- ์ฅ์ ์ ํ๊ณผ ์ด๋ ์๋จ ์ค์ ์ ๋ฐ๋ผ UIยท์๋ด ์ ๋ณด ์๋ ์ต์ ํ
+- ์ ๊ทผ์ฑ ํํฐ ๊ธฐ๋ฐ ์ฅ์ ๊ฒ์ยท์ถ์ฒ
+- ์ฅ์ ์ธ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ฐธ์ฌํ ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ๊ณต์
+- ์ฅ์ ์ธ์ ์ด๋ ๊ฒฝํ ๊ฐ์ ๋ฐ ๋ง๋ชปํ๋ ์ฌ์ํ ๋ถํธ ํด์
+๋ฅผ ๋ชฉํ๋ก ํ๋ ๋ฐฐ๋ฆฌ์ดํ๋ฆฌ ์ง๋ ํ๋ซํผ์
๋๋ค.
+
+### ๐ฏ ์๋น์ค ๋ชฉํ (SERVICE GOALS)
+
+**์ฅ์ ์ ํยท์ด๋ ์๋จ๋ณ ์ต์ ํ๋ ๊ฒฝ๋ก ํ์**
+
+**์ ๊ทผ์ฑ ํํฐ ๊ธฐ๋ฐ ์ฅ์ ์ถ์ฒ**
+
+**์ฅ์ ์ธ ์ฐธ์ฌํ ์ ๊ทผ์ฑ ์ ๋ณด ์์งยท๊ณต์ **
+
+(์ฑ์ฐ๊ธฐ)
+
+
+
+## ๐ ์ฃผ์ ๊ธฐ๋ฅ
+**1. ์ง๋ ๊ธฐ๋ฐ ์ ๊ทผ ๊ฐ๋ฅ ์ฅ์ ๊ฒ์**
+
+์๋ฆฌ๋ฒ ์ดํฐ, ๊ฒฝ์ฌ๋ก, ์ฅ์ ์ธ ํ์ฅ์ค ๋ฑ ์ฅ์ ์ธ๋ค์ด ํ์์ ์ผ๋ก ์๊ณ ์ถ์ดํ๋ ์ ๋ณด๋ค๋ก ์ฅ์ ํํฐ๋ง
+์์น ๊ธฐ๋ฐ ์ถ์ฒ
+
+**2. ๋ง์ถคํ ๊ฒฝ๋ก ์๋ด**
+
+์ฅ์ ์ ํ๋ณ ๊ฒฝ๋ก ์ต์ ํ (ํ ์ฒด์ด, ์๊ฐ์ฅ์ , ์ง์ ์ฅ์ ๋ฑ)
+
+**3. ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ์์ฑยท์ด๋**
+
+์ด์ฉ์๊ฐ ๋จ๊ธด ์ ๊ทผ์ฑ ์ค์ฌ ๋ฆฌ๋ทฐ ํ์ธ
+
+**4. ๋ง์ด ํ๋ ์ด์ค**
+
+๋๋ง์ ์ฅ์ ์จ์ด๋ธ์กด ๋ฆฌ์คํธ ์ ์ฅ
+
+์ ์ฅํ ์ฅ์๋ณ ์จ์ด๋ธ์กด ์กฐํ ๋ฐ ์ญ์
+
+(์ฑ์ฐ๊ธฐ)
+
+
+
+## ๐๏ธ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ
+
+
+
+
+## ๐ดํด๋ ๊ตฌ์กฐ
+```
+wayble-server/
+โโโ java/
+โ โโโ com/
+โ โโโ wayble/
+โ โโโ server/
+โ โโโ admin/ # ๊ด๋ฆฌ์ ๊ด๋ จ ๊ธฐ๋ฅ
+โ โโโ auth/ # ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๊ด๋ จ ๊ธฐ๋ฅ
+โ โโโ aws/ # AWS ์ฐ๋ (S3, CloudWatch ๋ฑ)
+โ โโโ common/ # ๊ณตํต ์ ํธ, ์์ธ ์ฒ๋ฆฌ ๋ฑ
+โ โโโ direction/ # ๊ธธ์ฐพ๊ธฐ ๋ฐ ๊ฒฝ๋ก ์๋ด
+โ โโโ explore/ # ํ์ ๋ฐ ์ถ์ฒ ๊ด๋ จ
+โ โโโ logging/ # ๋ก๊น
์ค์
+โ โโโ review/ # ๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์กฐํ
+โ โโโ user/ # ์ ์ ๊ด๋ จ ๊ธฐ๋ฅ
+โ โโโ wayblezone/ # ์จ์ด๋ธ์กด ๊ด๋ จ ๊ธฐ๋ฅ
+โ โโโ ServerApplication.java
+โ
+โโโ resources/
+โ โโโ data/ # ๋ฐ์ดํฐ ๊ด๋ จ ๋ฆฌ์์ค
+โ โโโ elasticsearch/ # Elasticsearch ๊ด๋ จ ์ค์
+โ โโโ templates/ # ํ
ํ๋ฆฟ ํ์ผ
+โ โโโ application.properties # Spring Boot ํ๊ฒฝ ์ค์
+โ โโโ application_secret.yml # ๋ฏผ๊ฐ ์ ๋ณด ์ค์
+โ โโโ keystore.p12 # HTTPS ์ธ์ฆ์
+โ โโโ logback-spring.xml
+โ โโโ seocho_pedestrian.json # ์์ด๊ตฌ ๋ณดํ์ ๋ฐ์ดํฐ
+โ โโโ wayble_markers.json # ์จ์ด๋ธ ๋ง์ปค ๋ฐ์ดํฐ
+โ
+โโโ test/ # ํ
์คํธ ๊ด๋ จ
+โ
+โโโ wrapper/
+โโโ .gitattributes
+โโโ .gitignore
+โโโ .coderabbit.yml
+โโโ application.yml
+โโโ build.gradle
+โโโ docker-compose.yml
+โโโ docker-els.yml
+โโโ Dockerfile
+โโโ Dockerfile.elasticsearch
+โโโ gradlew
+```
+
+
+## ๐์์คํ
๊ตฌ์ฑ๋
+
+
+
+
+## โ๏ธAPI ๋ช
์ธ
+
+#### [๐ ๏ธWayble ๊ธฐ๋ฅ๋ช
์ธ ๋งํฌ](https://www.notion.so/API-21d75cf0b87b80248a0ec55c6134ad20)
+
+
From bcbd0bc8804d3db886103a857185d7eaac74e463 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A0=EC=8A=B9=EC=9D=B8?=
<144124353+seung-in-Yoo@users.noreply.github.com>
Date: Thu, 14 Aug 2025 17:47:42 +0900
Subject: [PATCH 02/12] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index cea91bb..45c5d3d 100644
--- a/README.md
+++ b/README.md
@@ -85,7 +85,7 @@ WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์,
- ์ฅ์ ์ธ์ ์ด๋ ๊ฒฝํ ๊ฐ์ ๋ฐ ๋ง๋ชปํ๋ ์ฌ์ํ ๋ถํธ ํด์
๋ฅผ ๋ชฉํ๋ก ํ๋ ๋ฐฐ๋ฆฌ์ดํ๋ฆฌ ์ง๋ ํ๋ซํผ์
๋๋ค.
-### ๐ฏ ์๋น์ค ๋ชฉํ (SERVICE GOALS)
+### ๐ฏ ์๋น์ค ๋ชฉํ
**์ฅ์ ์ ํยท์ด๋ ์๋จ๋ณ ์ต์ ํ๋ ๊ฒฝ๋ก ํ์**
From 54c4e8f333f5bc3b69688c5ab887b0e1d2ca77e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A0=EC=8A=B9=EC=9D=B8?=
<144124353+seung-in-Yoo@users.noreply.github.com>
Date: Thu, 14 Aug 2025 18:19:22 +0900
Subject: [PATCH 03/12] Update README.md
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 45c5d3d..6b18881 100644
--- a/README.md
+++ b/README.md
@@ -122,7 +122,8 @@ WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์,
## ๐๏ธ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ
-
+
+
From 9b7aa4ce83fbb78553d3d64d1124881d9c8c87a6 Mon Sep 17 00:00:00 2001
From: hyoin <144425658+hyoinYang@users.noreply.github.com>
Date: Fri, 15 Aug 2025 00:13:08 +0900
Subject: [PATCH 04/12] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 6b18881..89c4ef7 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,8 @@ WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์,
์ฅ์ ์ ํ๋ณ ๊ฒฝ๋ก ์ต์ ํ (ํ ์ฒด์ด, ์๊ฐ์ฅ์ , ์ง์ ์ฅ์ ๋ฑ)
+๋์ค๊ตํต ๊ฒฝ๋ก์์ ์ฅ์ ์ธ๋ค์๊ฒ ํ์ํ ์ ๋ณด(์งํ์ฒ ์ญ-์๋ฆฌ๋ฒ ์ดํฐ ์์น ๋ฑ, ๋ฒ์ค-์ ์๋ฒ์ค ์ฌ๋ถ ๋ฑ) ์ ๊ณต
+
**3. ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ์์ฑยท์ด๋**
์ด์ฉ์๊ฐ ๋จ๊ธด ์ ๊ทผ์ฑ ์ค์ฌ ๋ฆฌ๋ทฐ ํ์ธ
From 698c471f0e21e1a6093ec9b60f4271eb5f8b3c33 Mon Sep 17 00:00:00 2001
From: Jeongbin Joo <166782961+zyovn@users.noreply.github.com>
Date: Fri, 15 Aug 2025 03:47:03 +0900
Subject: [PATCH 05/12] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 89c4ef7..8c7753a 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,8 @@ WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์,
์ฅ์ ์ ํ๋ณ ๊ฒฝ๋ก ์ต์ ํ (ํ ์ฒด์ด, ์๊ฐ์ฅ์ , ์ง์ ์ฅ์ ๋ฑ)
+์จ์ด๋ธ ๋ง์ปค (๊ฒฝ์ฌ๋ก, ํ ์ฒด์ด ์ถฉ์ ๊ธฐ ๋ฑ)์ ํ์ฉํ์ฌ ์ปค์คํ
์ถ์ฒ ๊ฒฝ๋ก ์ ๊ณต
+
๋์ค๊ตํต ๊ฒฝ๋ก์์ ์ฅ์ ์ธ๋ค์๊ฒ ํ์ํ ์ ๋ณด(์งํ์ฒ ์ญ-์๋ฆฌ๋ฒ ์ดํฐ ์์น ๋ฑ, ๋ฒ์ค-์ ์๋ฒ์ค ์ฌ๋ถ ๋ฑ) ์ ๊ณต
**3. ์ ๊ทผ์ฑ ๋ฆฌ๋ทฐ ์์ฑยท์ด๋**
From f297e27c40e7e2d2419f3f3f27bc82ceb97e40d7 Mon Sep 17 00:00:00 2001
From: hyoin <144425658+hyoinYang@users.noreply.github.com>
Date: Fri, 15 Aug 2025 13:04:52 +0900
Subject: [PATCH 06/12] Update README.md
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
erdย ์ด๋ฏธ์ง ์์
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8c7753a..81f83b4 100644
--- a/README.md
+++ b/README.md
@@ -126,7 +126,8 @@ WAYBLE์ ์ฅ์ ์ธยท๊ตํต์ฝ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง์ถคํ ๊ฒฝ๋ก ํ์,
## ๐๏ธ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ
-
+
+
From d6801b13f2734f76e8dff8dc613df341469dfb6f Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 18:25:49 +0900
Subject: [PATCH 07/12] =?UTF-8?q?[fix]=20kric=20api=20=EC=9D=91=EB=8B=B5?=
=?UTF-8?q?=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wayble/server/common/config/WebClientConfig.java | 1 +
.../external/kric/dto/KricToiletRawBody.java | 7 -------
.../external/kric/dto/KricToiletRawItem.java | 11 ++++++++++-
.../external/kric/dto/KricToiletRawResponse.java | 2 +-
4 files changed, 12 insertions(+), 9 deletions(-)
delete mode 100644 src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawBody.java
diff --git a/src/main/java/com/wayble/server/common/config/WebClientConfig.java b/src/main/java/com/wayble/server/common/config/WebClientConfig.java
index 8a8d438..e9d45cf 100644
--- a/src/main/java/com/wayble/server/common/config/WebClientConfig.java
+++ b/src/main/java/com/wayble/server/common/config/WebClientConfig.java
@@ -31,6 +31,7 @@ public WebClient tMapWebClient() {
public WebClient kricWebClient() {
return WebClient.builder()
.baseUrl(kricProperties.baseUrl())
+ .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))
.build();
}
}
diff --git a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawBody.java b/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawBody.java
deleted file mode 100644
index 3af1db3..0000000
--- a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawBody.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.wayble.server.direction.external.kric.dto;
-
-import java.util.List;
-
-public record KricToiletRawBody(
- List item
-) {}
diff --git a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawItem.java b/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawItem.java
index ddd6f91..43d676d 100644
--- a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawItem.java
+++ b/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawItem.java
@@ -3,6 +3,15 @@
import lombok.Getter;
public record KricToiletRawItem(
+ String railOprIsttCd,
+ String lnCd,
String stinCd,
- String toltNum
+ String grndDvNm,
+ String stinFlor,
+ String gateInotDvNm,
+ String exitNo,
+ String dtlLoc,
+ String mlFmlDvNm,
+ String toltNum,
+ String diapExchNum
) {}
diff --git a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawResponse.java b/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawResponse.java
index b0b3faa..26ecde7 100644
--- a/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawResponse.java
+++ b/src/main/java/com/wayble/server/direction/external/kric/dto/KricToiletRawResponse.java
@@ -3,5 +3,5 @@
import java.util.List;
public record KricToiletRawResponse(
- KricToiletRawBody body
+ List body
) {}
\ No newline at end of file
From 3bf982ffd82a707bdc25f4fbcd6c5b5c6f9b6ad9 Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 18:31:29 +0900
Subject: [PATCH 08/12] =?UTF-8?q?[fix]=20=ED=9C=A0=EC=B2=B4=EC=96=B4=20?=
=?UTF-8?q?=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A2=8C=ED=91=9C=20=EB=A7=90?=
=?UTF-8?q?=EA=B3=A0=20string=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?=
=?UTF-8?q?=EB=B3=80=ED=99=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../response/TransportationResponseDto.java | 8 +-
.../entity/transportation/Facility.java | 1 -
.../entity/transportation/Route.java | 6 +
.../entity/transportation/Wheelchair.java | 24 ++++
.../repository/FacilityRepository.java | 7 +-
.../repository/WheelchairInfoRepository.java | 15 +++
.../direction/service/FacilityService.java | 103 ++++++++++--------
.../service/TransportationService.java | 15 ++-
8 files changed, 126 insertions(+), 53 deletions(-)
create mode 100644 src/main/java/com/wayble/server/direction/entity/transportation/Wheelchair.java
create mode 100644 src/main/java/com/wayble/server/direction/repository/WheelchairInfoRepository.java
diff --git a/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java b/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
index 1cb9c64..aae1bd7 100644
--- a/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
+++ b/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
@@ -43,8 +43,8 @@ public record BusInfo(
){}
public record SubwayInfo(
- List wheelchair,
- List elevator,
+ List wheelchair,
+ List elevator,
Boolean accessibleRestroom
) {}
@@ -55,8 +55,8 @@ public record LocationInfo(
// ์งํ์ฒ ์์ค ์ ๋ณด ๋ฌถ์ (์๋น์ค ๋ด๋ถ์์ ์ฌ์ฉ)
public record NodeInfo(
- List wheelchair,
- List elevator,
+ List wheelchair,
+ List elevator,
Boolean accessibleRestroom
) {}
}
diff --git a/src/main/java/com/wayble/server/direction/entity/transportation/Facility.java b/src/main/java/com/wayble/server/direction/entity/transportation/Facility.java
index c4e62da..88e58c2 100644
--- a/src/main/java/com/wayble/server/direction/entity/transportation/Facility.java
+++ b/src/main/java/com/wayble/server/direction/entity/transportation/Facility.java
@@ -16,7 +16,6 @@
@Table(name = "facility")
public class Facility {
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="stationName")
diff --git a/src/main/java/com/wayble/server/direction/entity/transportation/Route.java b/src/main/java/com/wayble/server/direction/entity/transportation/Route.java
index 38caac8..d35c171 100644
--- a/src/main/java/com/wayble/server/direction/entity/transportation/Route.java
+++ b/src/main/java/com/wayble/server/direction/entity/transportation/Route.java
@@ -6,6 +6,8 @@
import jakarta.persistence.*;
import lombok.*;
+import java.util.List;
+
@Entity
@Getter
@Builder(access = AccessLevel.PRIVATE)
@@ -33,4 +35,8 @@ public class Route {
@ManyToOne
@JoinColumn(name = "end_node_id")
private Node endNode;
+
+ // ํ ์ฒด์ด ์ ๋ณด
+ @OneToMany(mappedBy = "route", fetch = FetchType.LAZY)
+ private List wheelchairs;
}
diff --git a/src/main/java/com/wayble/server/direction/entity/transportation/Wheelchair.java b/src/main/java/com/wayble/server/direction/entity/transportation/Wheelchair.java
new file mode 100644
index 0000000..0a21f44
--- /dev/null
+++ b/src/main/java/com/wayble/server/direction/entity/transportation/Wheelchair.java
@@ -0,0 +1,24 @@
+package com.wayble.server.direction.entity.transportation;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity
+@Getter
+@Builder
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Table(name = "wheelchair")
+public class Wheelchair {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "route_id", nullable = false)
+ private Route route;
+
+ @Column(name = "wheelchair_location", nullable = false)
+ private String wheelchairLocation; // 1-4 ๋ฑ
+
+}
diff --git a/src/main/java/com/wayble/server/direction/repository/FacilityRepository.java b/src/main/java/com/wayble/server/direction/repository/FacilityRepository.java
index 7fe4a12..d8a12c9 100644
--- a/src/main/java/com/wayble/server/direction/repository/FacilityRepository.java
+++ b/src/main/java/com/wayble/server/direction/repository/FacilityRepository.java
@@ -6,7 +6,12 @@
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
public interface FacilityRepository extends JpaRepository {
- Optional findByNodeId(Long nodeId);
+ @Query("SELECT f FROM Facility f " +
+ "LEFT JOIN FETCH f.lifts " +
+ "WHERE f.id = :nodeId")
+ Optional findByNodeId(@Param("nodeId") Long nodeId);
}
diff --git a/src/main/java/com/wayble/server/direction/repository/WheelchairInfoRepository.java b/src/main/java/com/wayble/server/direction/repository/WheelchairInfoRepository.java
new file mode 100644
index 0000000..007fd89
--- /dev/null
+++ b/src/main/java/com/wayble/server/direction/repository/WheelchairInfoRepository.java
@@ -0,0 +1,15 @@
+package com.wayble.server.direction.repository;
+
+import com.wayble.server.direction.entity.transportation.Wheelchair;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface WheelchairInfoRepository extends JpaRepository {
+
+ @Query("SELECT w FROM Wheelchair w WHERE w.route.routeId = :routeId")
+ List findByRouteId(@Param("routeId") Long routeId);
+}
diff --git a/src/main/java/com/wayble/server/direction/service/FacilityService.java b/src/main/java/com/wayble/server/direction/service/FacilityService.java
index fbd4450..41bd515 100644
--- a/src/main/java/com/wayble/server/direction/service/FacilityService.java
+++ b/src/main/java/com/wayble/server/direction/service/FacilityService.java
@@ -2,9 +2,13 @@
import com.wayble.server.direction.dto.response.TransportationResponseDto;
import com.wayble.server.direction.entity.transportation.Facility;
+import com.wayble.server.direction.entity.transportation.Node;
+import com.wayble.server.direction.entity.transportation.Wheelchair;
import com.wayble.server.direction.external.kric.dto.KricToiletRawItem;
import com.wayble.server.direction.external.kric.dto.KricToiletRawResponse;
import com.wayble.server.direction.repository.FacilityRepository;
+import com.wayble.server.direction.repository.NodeRepository;
+import com.wayble.server.direction.repository.WheelchairInfoRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -17,7 +21,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.Optional;
@Service
@@ -25,38 +29,44 @@
@RequiredArgsConstructor
public class FacilityService {
private final FacilityRepository facilityRepository;
+ private final NodeRepository nodeRepository;
+ private final WheelchairInfoRepository wheelchairInfoRepository;
private final WebClient kricWebClient;
private final KricProperties kricProperties;
- public TransportationResponseDto.NodeInfo getNodeInfo(Long nodeId){
- Facility facility = facilityRepository.findByNodeId(nodeId).orElse(null);
- List wheelchair = new ArrayList<>();
- List elevator = new ArrayList<>();
+ public TransportationResponseDto.NodeInfo getNodeInfo(Long nodeId, Long routeId) {
+ List wheelchair = new ArrayList<>();
+ List elevator = new ArrayList<>();
Boolean accessibleRestroom = false;
- if (facility != null) {
- if (facility.getLifts() != null) {
- wheelchair = facility.getLifts().stream()
- .map(lift -> new TransportationResponseDto.LocationInfo(
- lift.getLatitude(),
- lift.getLongitude()
- ))
- .toList();
+ Optional nodeOpt = nodeRepository.findById(nodeId);
+
+ if (nodeOpt.isPresent()) {
+ Node node = nodeOpt.get();
+
+ if (routeId != null) {
+ List wheelchairs = wheelchairInfoRepository.findByRouteId(routeId);
+ for (Wheelchair wheelchairInfo : wheelchairs) {
+ String location = wheelchairInfo.getWheelchairLocation();
+ if (location != null && !location.trim().isEmpty()) {
+ wheelchair.add(location.trim());
+ }
+ }
}
-
- if (facility.getElevators() != null) {
- elevator = facility.getElevators().stream()
- .map(elev -> new TransportationResponseDto.LocationInfo(
- elev.getLatitude(),
- elev.getLongitude()
- ))
- .toList();
+
+ elevator = new ArrayList<>();
+
+ Facility facility = facilityRepository.findByNodeId(nodeId).orElse(null);
+ if (facility != null) {
+ String stinCd = facility.getStinCd();
+ String railOprLsttCd = facility.getRailOprLsttCd();
+ String lnCd = facility.getLnCd();
+
+ if (stinCd != null && railOprLsttCd != null && lnCd != null) {
+ Map toiletInfo = getToiletInfo(facility);
+ accessibleRestroom = toiletInfo.getOrDefault(stinCd, false);
+ }
}
-
- // Get toilet information
- Map toiletInfo = getToiletInfo(facility);
- String stinCd = facility.getStinCd();
- accessibleRestroom = toiletInfo.getOrDefault(stinCd, false);
}
return new TransportationResponseDto.NodeInfo(
@@ -66,11 +76,13 @@ public TransportationResponseDto.NodeInfo getNodeInfo(Long nodeId){
);
}
- private Map getToiletInfo(Facility facility){
- String uri = UriComponentsBuilder.fromPath("/api/vulnerableUserInfo/stationDisabledToilet")
+
+
+ private Map getToiletInfo(Facility facility) {
+ String uri = UriComponentsBuilder.fromPath("/openapi/vulnerableUserInfo/stationDisabledToilet")
.queryParam("serviceKey", kricProperties.key())
.queryParam("format", "json")
- .queryParam("railOprLsttCd", facility.getRailOprLsttCd())
+ .queryParam("railOprIsttCd", facility.getRailOprLsttCd())
.queryParam("lnCd", facility.getLnCd())
.queryParam("stinCd", facility.getStinCd())
.toUriString();
@@ -83,25 +95,30 @@ private Map getToiletInfo(Facility facility){
.retrieve()
.bodyToMono(KricToiletRawResponse.class)
.block();
-
- items = response.body().item();
-
- } catch(Exception e){
- log.info("์ญ์ฌ ํ์ฅ์ค api ํธ์ถ ์ค ์๋ฌ ๋ฐ์: {}: {}", uri, e.getCause());
+
+ if (response == null || response.body() == null) {
+ return new HashMap<>();
+ }
+
+ items = response.body();
+ } catch(Exception e) {
+ log.error("KRIC API ํธ์ถ ์คํจ: {}", e.getMessage());
return new HashMap<>();
}
- // ์ญ๋ณ๋ก ํ์ฅ์ค ์กด์ฌ ์ฌ๋ถ ์ถ์ถ (์ค๋ณต ์ ๊ฑฐ)
Map stationToiletMap = new HashMap<>();
- for (KricToiletRawItem item : items) {
- String stinCd = item.stinCd();
- int toiletCount = 0;
- try {
- toiletCount = Integer.parseInt(item.toltNum());
- } catch (NumberFormatException e) {
- log.warn("์งํ์ฒ ์ญ ํ ์ด๋ ๊ฐ์ ํ์ฑ ์คํจ. ์งํ์ฒ ์ญ ๋ฒํธ {}: {}", stinCd, item.toltNum(), e);
+ if (items != null) {
+ for (KricToiletRawItem item : items) {
+ String stinCd = item.stinCd();
+ int toiletCount = 0;
+ try {
+ toiletCount = Integer.parseInt(item.toltNum());
+ } catch (NumberFormatException e) {
+ log.warn("์ฅ์ ์ธ ํ์ฅ์ค ์ ๋ณด ํ์ฑ ์คํจ. stinCd: {}, toltNum: {}", stinCd, item.toltNum());
+ }
+ boolean hasToilet = stationToiletMap.getOrDefault(stinCd, false) || toiletCount > 0;
+ stationToiletMap.put(stinCd, hasToilet);
}
- stationToiletMap.put(stinCd, stationToiletMap.getOrDefault(stinCd, false) || toiletCount > 0);
}
return stationToiletMap;
diff --git a/src/main/java/com/wayble/server/direction/service/TransportationService.java b/src/main/java/com/wayble/server/direction/service/TransportationService.java
index 50e4759..bf7dc76 100644
--- a/src/main/java/com/wayble/server/direction/service/TransportationService.java
+++ b/src/main/java/com/wayble/server/direction/service/TransportationService.java
@@ -623,20 +623,27 @@ private List mergeConsecutiveRoutes(List p
}
}
} catch (Exception e) {
- log.info("๋ฒ์ค ์ ๋ณด ์กฐํ ์คํจ: {}", e.getMessage());
- }
+ log.error("๋ฒ์ค ์ ๋ณด ์กฐํ ์คํจ: {}", e.getMessage());
+ }
} else if (currentType == DirectionType.SUBWAY) {
try {
if (currentEdge.getStartNode() != null) {
- TransportationResponseDto.NodeInfo nodeInfo = facilityService.getNodeInfo(currentEdge.getStartNode().getId());
+ TransportationResponseDto.NodeInfo nodeInfo = facilityService.getNodeInfo(currentEdge.getStartNode().getId(), currentEdge.getRoute().getRouteId());
+
subwayInfo = new TransportationResponseDto.SubwayInfo(
nodeInfo.wheelchair(),
nodeInfo.elevator(),
nodeInfo.accessibleRestroom()
);
+ } else {
+ subwayInfo = new TransportationResponseDto.SubwayInfo(
+ new ArrayList<>(),
+ new ArrayList<>(),
+ false
+ );
}
} catch (Exception e) {
- log.info("์งํ์ฒ ์ ๋ณด ์กฐํ ์คํจ: {}", e.getMessage());
+ log.error("์งํ์ฒ ์ ๋ณด ์กฐํ ์คํจ: {}", e.getMessage());
subwayInfo = new TransportationResponseDto.SubwayInfo(
new ArrayList<>(),
new ArrayList<>(),
From f5374385b592ad7b5fe88c66c9ebac9b574945f3 Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 21:54:01 +0900
Subject: [PATCH 09/12] =?UTF-8?q?[fix]=20=ED=99=98=EC=8A=B9=20=ED=9A=9F?=
=?UTF-8?q?=EC=88=98=20=EB=B3=80=EA=B2=BD,=20=ED=99=98=EC=8A=B9=20?=
=?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/TransportationService.java | 30 +++++++++++--------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/wayble/server/direction/service/TransportationService.java b/src/main/java/com/wayble/server/direction/service/TransportationService.java
index bf7dc76..802ce0f 100644
--- a/src/main/java/com/wayble/server/direction/service/TransportationService.java
+++ b/src/main/java/com/wayble/server/direction/service/TransportationService.java
@@ -287,9 +287,9 @@ private List> filterAndSortRoutes(List>comparingInt(this::calculateTransferCount)
@@ -723,18 +723,22 @@ private Node findNearestNode(List nodes, double lat, double lon) {
private int calculateTransferCount(List steps) {
int transferCount = 0;
- for (int i = 0; i < steps.size() - 1; i++) {
- TransportationResponseDto.Step currentStep = steps.get(i);
- TransportationResponseDto.Step nextStep = steps.get(i + 1);
-
- if (currentStep.mode() != DirectionType.WALK && nextStep.mode() != DirectionType.WALK) {
- if (currentStep.mode() == nextStep.mode() &&
- currentStep.routeName() != null && nextStep.routeName() != null &&
- !currentStep.routeName().equals(nextStep.routeName())) {
- transferCount++;
- } else if (currentStep.mode() != nextStep.mode()) {
- transferCount++;
+ DirectionType previousMode = null;
+ String previousRouteName = null;
+
+ for (TransportationResponseDto.Step step : steps) {
+ if (step.mode() != DirectionType.WALK && step.mode() != DirectionType.FROM_WAYPOINT && step.mode() != DirectionType.TO_WAYPOINT) {
+ if (previousMode != null) {
+ if (previousMode == step.mode() &&
+ previousRouteName != null && step.routeName() != null &&
+ !previousRouteName.equals(step.routeName())) {
+ transferCount++;
+ } else if (previousMode != step.mode()) {
+ transferCount++;
+ }
}
+ previousMode = step.mode();
+ previousRouteName = step.routeName();
}
}
return transferCount;
From efb41065b3c44dce97d02470db60789627d7a598 Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 21:55:22 +0900
Subject: [PATCH 10/12] =?UTF-8?q?[refactor]=20api=20=EA=B4=80=EB=A0=A8=20?=
=?UTF-8?q?=EB=A1=9C=EA=B9=85=EC=9D=84=20=EC=9E=90=EC=84=B8=ED=95=98?=
=?UTF-8?q?=EA=B2=8C=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../server/direction/service/FacilityService.java | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/wayble/server/direction/service/FacilityService.java b/src/main/java/com/wayble/server/direction/service/FacilityService.java
index 41bd515..25f9f00 100644
--- a/src/main/java/com/wayble/server/direction/service/FacilityService.java
+++ b/src/main/java/com/wayble/server/direction/service/FacilityService.java
@@ -65,7 +65,12 @@ public TransportationResponseDto.NodeInfo getNodeInfo(Long nodeId, Long routeId)
if (stinCd != null && railOprLsttCd != null && lnCd != null) {
Map toiletInfo = getToiletInfo(facility);
accessibleRestroom = toiletInfo.getOrDefault(stinCd, false);
+ } else {
+ log.error("Facility ์ ๋ณด ๋๋ฝ - nodeId: {}, stinCd: {}, railOprLsttCd: {}, lnCd: {}",
+ nodeId, stinCd, railOprLsttCd, lnCd);
}
+ } else {
+ log.error("Facility ์ ๋ณด ์์ - nodeId: {}", nodeId);
}
}
@@ -101,8 +106,12 @@ private Map getToiletInfo(Facility facility) {
}
items = response.body();
+ if (items == null) {
+ return new HashMap<>();
+ }
} catch(Exception e) {
- log.error("KRIC API ํธ์ถ ์คํจ: {}", e.getMessage());
+ log.error("KRIC API ํธ์ถ ์คํจ - stinCd: {}, railOprIsttCd: {}, lnCd: {}, error: {}",
+ facility.getStinCd(), facility.getRailOprLsttCd(), facility.getLnCd(), e.getMessage(), e);
return new HashMap<>();
}
From 8553ffa3a77cc9205f45395f29c6fbae60c57ba7 Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 21:55:56 +0900
Subject: [PATCH 11/12] =?UTF-8?q?[fix]=20kric=20api=EC=97=90=20=ED=83=80?=
=?UTF-8?q?=EC=9E=84=EC=95=84=EC=9B=83=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/wayble/server/common/config/WebClientConfig.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/main/java/com/wayble/server/common/config/WebClientConfig.java b/src/main/java/com/wayble/server/common/config/WebClientConfig.java
index e9d45cf..acbbf29 100644
--- a/src/main/java/com/wayble/server/common/config/WebClientConfig.java
+++ b/src/main/java/com/wayble/server/common/config/WebClientConfig.java
@@ -32,6 +32,10 @@ public WebClient kricWebClient() {
return WebClient.builder()
.baseUrl(kricProperties.baseUrl())
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))
+ .filter((request, next) -> next.exchange(request)
+ .timeout(java.time.Duration.ofSeconds(15))
+ .retryWhen(reactor.util.retry.Retry.backoff(3, java.time.Duration.ofSeconds(1))
+ .filter(throwable -> throwable instanceof org.springframework.web.reactive.function.client.WebClientRequestException)))
.build();
}
}
From 11774c5899fbe6564ae45f84182cba1487e3d49d Mon Sep 17 00:00:00 2001
From: hyoin
Date: Fri, 15 Aug 2025 23:50:58 +0900
Subject: [PATCH 12/12] =?UTF-8?q?[fix]=20moveInfo=EC=97=90=20=EB=8F=84?=
=?UTF-8?q?=EB=B3=B4=20=EC=9D=B4=EB=8F=99=20=EA=B1=B0=EB=A6=AC=20=EB=B0=98?=
=?UTF-8?q?=EC=98=81,=20=ED=99=98=EC=8A=B9=20=EB=A1=9C=EC=A7=81=20?=
=?UTF-8?q?=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../response/TransportationResponseDto.java | 2 +-
.../service/TransportationService.java | 20 +++++++++++++++++--
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java b/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
index aae1bd7..9ade2ec 100644
--- a/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
+++ b/src/main/java/com/wayble/server/direction/dto/response/TransportationResponseDto.java
@@ -20,7 +20,7 @@ public record Step(
DirectionType mode, // ์: START, WALK, SUBWAY, BUS, FINISH
@Nullable List moveInfo, // ๊ฐ์ Step์ผ๋ก ์ด๋ํ ์ ๋ฅ์ฅ(Node) ์ ๋ณด (์ค๊ฐ ์ ๋ฅ์ฅ๋ง)
@Nullable String routeName,
- Integer moveNumber, // ๊ฐ์ Step(route)๋ก ์ด๋ํ ํ์
+ Integer moveNumber, // ๊ฐ์ Step(route)๋ก ์ด๋ํ ํ์ ๋๋ WALK step์ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ(๋ฏธํฐ ๋จ์)
@Nullable BusInfo busInfo, // ๋ฒ์ค์ผ ๊ฒฝ์ฐ์๋ง ์์ฑ, ์ด์ธ์ ๊ฒฝ์ฐ null
@Nullable SubwayInfo subwayInfo, // ์งํ์ฒ ์ผ ๊ฒฝ์ฐ์๋ง ์์ฑ, ์ด์ธ์ ๊ฒฝ์ฐ null
String from,
diff --git a/src/main/java/com/wayble/server/direction/service/TransportationService.java b/src/main/java/com/wayble/server/direction/service/TransportationService.java
index 802ce0f..ecb9a88 100644
--- a/src/main/java/com/wayble/server/direction/service/TransportationService.java
+++ b/src/main/java/com/wayble/server/direction/service/TransportationService.java
@@ -277,7 +277,7 @@ private boolean areRoutesIdentical(List route1,
}
private List> filterAndSortRoutes(List> routes) {
- return routes.stream()
+ return routes.stream()
.filter(route -> {
// ๋์ค๊ตํต ํฌํจ ์ฌ๋ถ ํ์ธ
boolean hasPublicTransport = route.stream()
@@ -590,8 +590,20 @@ private List mergeConsecutiveRoutes(List p
String toName = getNodeName(pathEdges.get(j - 1).getEndNode());
if (currentType == DirectionType.WALK) {
+ int walkDistance = 0; // ๋ฏธํฐ ๋จ์
+ Node walkStartNode = pathEdges.get(i).getStartNode();
+ Node walkEndNode = pathEdges.get(j - 1).getEndNode();
+
+ if (walkStartNode != null && walkEndNode != null) {
+ double distanceKm = haversine(
+ walkStartNode.getLatitude(), walkStartNode.getLongitude(),
+ walkEndNode.getLatitude(), walkEndNode.getLongitude()
+ );
+ walkDistance = (int) (distanceKm * 1000); // km๋ฅผ m๋ก ๋ณํ
+ }
+
mergedSteps.add(new TransportationResponseDto.Step(
- DirectionType.WALK, null, null, 0, null, null, fromName, toName
+ DirectionType.WALK, null, null, walkDistance, null, null, fromName, toName
));
i = j;
continue;
@@ -733,6 +745,10 @@ private int calculateTransferCount(List steps) {
previousRouteName != null && step.routeName() != null &&
!previousRouteName.equals(step.routeName())) {
transferCount++;
+ } else if (previousMode == step.mode() &&
+ previousRouteName != null && step.routeName() != null &&
+ previousRouteName.equals(step.routeName())) {
+ transferCount++;
} else if (previousMode != step.mode()) {
transferCount++;
}