ๆ็ตๆดๆฐ: 2026ๅนด9ๆ29ๆฅ
- ๆฆ่ฆ
- ๅ จไฝๆงๆ
- ใฌใคใคใผๆง้
- ใใผใฟใใคใใฉใคใณ
- ใคใณใกใขใช็ดขๅผ
- ไนๆ็ต่ทฏๆข็ดข
- GraphQL ใจในใญใผใไธ่ดใฎๆ ไฟ
- ๅฝๅ่ฆๅ
- ใใผใฟใใญใผ
- ใใฃใฌใฏใใชๆง้
- ้็จ
- ้ข้ฃใใญใฅใกใณใ
ๆฅๆฌใฎ้้้ง ใจใในๅใฎๆ ๅ ฑใ่ฟใ GraphQL API ใงใใCloudflare Workers ไธใง ๅไฝใใใใผใฟใฏใใซใๆใซ WASM ใใคใใชใธๅใ่พผใใง้ ๅธใใพใใ ใตใผใใผใใญใปในใใใผใฟใใผในใใใใพใใใ
ไปฅๅใฏใใชใณใใฌใในใฎใตใผใใผใ PostgreSQL ใใใใผใฟใ่ชญใใง gRPC-Web ใง ่ฟใใใฏใฉใคใขใณใใฏ BFF (TrainLCD/BFF) ใ GraphQL ใซๅคๆใใใใฎใไฝฟใฃใฆ ใใพใใใgRPC-Web ใไฝฟใ็ถใใ็็ฑใใชใใฃใใใใGraphQL ใ็ดๆฅ่ฟใๆงๆใซ ๆนใใBFF ใๅปๆญขใใพใใใ
| ็จ้ | ๆก็จใใฆใใใใฎ |
|---|---|
| ๅฎ่ก็ฐๅข | Cloudflare Workers (wasm32-unknown-unknown) |
| API | GraphQL (async-graphql 7) |
| ใใผใฟ | ใใซใๆใซ WASM ใธๅใ่พผใ CSV (generated/*.csv) |
| ใใผใฟ็ๆ | preprocessor crate (Rust ใฎใฟใงๅฎ่ฃ
) |
| ใใใญใค | wrangler |
ใใผใฟใใผในใไฝฟใใชใใฎใงใsqlx ใๆฅ็ถใใผใซใใใใพใใใๆค็ดขใฏใในใฆใ
ๅใ่พผใฟใใผใฟใใ isolate ใฎไธญใซ็ตใฟ็ซใฆใใคใณใกใขใช็ดขๅผใซๅฏพใใฆ่กใใพใใ
data/*.csv GTFS (ZIP) ODPT (JSON) N02 (GeoJSON)
้้ใฎๆญฃๆฌใใผใฟ ใใน 6 ใใฃใผใ ๆฑๆฅใใน ๅฝๅๆฐๅคๆ
ๅ ฑใฎ็ท่ทฏ
โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ preprocessor โ Rust ใฎใฟใงๅฎ่ฃ
ใๅ้ง
ๅ่ปใฎ
โ (ใใซใๆใใผใซ) โ ็ณป็ตฑ็ๆใ้ง
้ใฎ็ท่ทฏใฎ้ทใใฎ
โ โ ่จ็ฎใGTFS ใฎ็ตฑๅใ่กใ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
generated/*.csv 8 ใใผใใซ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ build.rs โ CSV ใ OUT_DIR ใซ้
็ฝฎใใsst ใจ
โ โ connections ใๅบๅฎ้ทใใคใใชใซๅคๆ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ worker-build โ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
WASM โโโโโโโโโบ Cloudflare Workers
โ
GraphQL (POST /)
โ
TrainLCDใใผใฟใฏ WASM ใซๅใ่พผใพใใใใใใใผใฟใๆดๆฐใใใใณใซๅใใใญใคใ ๅฟ ่ฆใงใใ ่ตทๅๆใซใใผใฟใ่ชญใฟ่พผใใง่ชๅ็ใซๅๆ ใใไป็ตใฟใงใฏใใใพใใใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation (src/graphql/) โ async-graphql ใฎใชใพใซใใจๅ
โ Query / ๅ / enum / ในใซใฉใผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Model (stationapi/src/model.rs) โ API ใ่ฟใๅคใฎๅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ UseCase (stationapi/src/use_case/) โ ใฏใจใชใฎๅฆ็ใ
โ QueryInteractor / DTO ๅคๆ โ IPAใปTTS ใฎ็ๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Domain (stationapi/src/domain/) โ ใจใณใใฃใใฃใ็ต่ทฏๆข็ดขใ
โ entity / repository ใใฌใคใ / ้ๅบฆ่กจ โ ๅฐ็ๆๅปใฎๆจๅฎใๆญฃ่ฆๅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Index (src/index.rs, src/repository.rs) โ ๅใ่พผใฟใใผใฟใฎ็ดขๅผใจ
โ โ repository ใใฌใคใใฎๅฎ่ฃ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโstationapi crate ใฏ Domain / UseCase / Model ใ ใใๅซใใฉใคใใฉใชใงใ
Worker ใจ preprocessor ใฎไธกๆนใใไฝฟใใใพใใwasm32 ๅใใซใใซใใงใใชใใใฐ
ใชใใชใใใใI/O ใไผดใไพๅญใฏ่ฟฝๅ ใใพใใใ
ใจใณใใฃใใฃใใชใใธใใชใฎๆฝ่ฑกใใใใฆ็ด็ฒใช่จ็ฎๅฆ็ (haversine ่ท้ขใ ็ต่ทฏๆข็ดขใๅฐ็ๆๅปใฎๆจๅฎใ้ๅบฆ่กจใใญใผใๅญใปIPA ๅคๆใๆค็ดข็จใฎๆญฃ่ฆๅ) ใ ็ฝฎใใฆใใพใใ
QueryInteractor ใ repository ใใฌใคใใ้ใใฆใใผใฟใ้ใใ้ง
ใซ่ทฏ็ทใป
ไบๆฅญ่
ใปๅ่ป็จฎๅฅใฎๆ
ๅ ฑใไปใๅ ใใพใใN+1 ๅ้กใ้ฟใใใใใ้ข้ฃใใผใฟใฏ
ๅธธใซใพใจใใฆๅๅพใใพใใ
DTO (use_case/dto/) ใฏใใกใคใณใจใณใใฃใใฃใ Model ใซๅคๆใใพใใIPA ใจ
TTS ใปใฐใกใณใใใใใง็ๆใใพใใ
API ใ่ฟใๅคใ่กจใๅใงใใใใจใใจใฏ prost ใ .proto ใใ็ๆใใฆใใๅ
ใงใใgRPC ใใใใๅพใใIPAใปTTS ใฎ็ๆใใใฎๅใธใฎๅคๆๅฆ็ใซ็ตใฟ่พผใพใใฆ
ใใใใใใใกใคใณใจใณใใฃใใฃใจ GraphQL ๅใฎ้ใฎๅฑคใจใใฆๆฎใใฆใใพใใ
async-graphql ใฎ Query ใชใพใซใใจๅๅฎ็พฉใ็ฝฎใใฆใใพใใModel ใ GraphQL ๅใซ
ๅคๆใใใฎใใใฎๅฑคใงใใ
ๅใ่พผใพใใ CSV ใฏใisolate ใฎไธญใงๆๅใซๅฟ
่ฆใซใชใฃใใจใใซไธๅบฆใ ใใใผในใใ
OnceLock ใซไฟๆใใพใใsrc/repository.rs ใฏ 4 ใคใฎ repository ใใฌใคใใๅฎ่ฃ
ใใฆใใใฎใงใ
UseCase ๅฑคใใใฏใใผใฟใใผในใไฝฟใฃใฆใใ้ ใจๅใใคใณใฟใผใใงใผในใซ่ฆใใพใใ
data/*.csv ใใใฎใพใพ Worker ใซๆธกใใจใๆฌ็ชใจใฏ็ฐใชใๆๅใซใชใใพใใ
- ๅ่ป็จฎๅฅใๆใใชใ่ทฏ็ทใซใฏใๅ้ง
ๅ่ปใฎ็ณป็ตฑใ่ฃใๅฟ
่ฆใใใใพใ (็ด 2,400 ่กใ
ๆๅนใช้ง
ใฎ็ด 21% ใ่ฉฒๅฝใใพใ)ใใใใใฎ่กใฏ
data/*.csvใซใฏๅซใพใใฆ ใใพใใ - ใในๅใปใใน่ทฏ็ทใปใใน็ณป็ตฑใฏใGTFS ใจ ODPT ใฎ JSON ใใ็ๆใใๅฟ ่ฆใ ใใใพใ
- ้ฃใๅใ้ง ใฎใใใ ใฎ็ท่ทฏใฎ้ทใใฏใๅฝๅๆฐๅคๆ ๅ ฑใฎ้้ใใผใฟใใๆฑใใๅฟ ่ฆใ ใใใพใ
ใใใใๆ
ใใฎใ preprocessor crate ใงใใ
make data # cargo run --profile tool -p stationapi-preprocessorๅฆ็ใฎๆตใใฏๆฌกใฎใจใใใงใใ
data/*.csvใ่ชญใฟ่พผใ (#ใงๅงใพใๅใฏ่ชญใฟ่พผใพใชใ)- ๅ้ง
ๅ่ปใฎ็ณป็ตฑใ็ๆใใ (
generate_virtual_local_rail_services) - ๅฝๅๆฐๅคๆ
ๅ ฑใฎ้้ใใผใฟ (N02) ใๅๅพใใ้ฃใๅใ้ง
ใฎใใใ ใฎ็ท่ทฏใฎ้ทใใ
ๆฑใใ (
track::generate_connectionsใ้ง ้ใฎ็ท่ทฏใฎ้ทใ) - GTFS ใใฃใผใ 6 ๆฌใๅๅพใปๅฑ้ใใฆ่ชญใฟ่พผใ (้ฝๅถใในใป่ฅฟๆญฆใในใปไบฌ็ใในใจใ ๆฑๆฅใในใ้่กใใๅคง็ฐๅบใปๅๅทๅบใป็ฎ้ปๅบใฎใณใใฅใใใฃใใน)
- ๆฑๆฅใในใฎ ODPT JSON ใ่ชญใฟ่พผใ (7 ๆฅ้ใญใฃใใทใฅใใ)
- ใในใฎใใผใฟใ lines / stations / types / station_station_types ใซ็ตฑๅใใ
generated/*.csvใซๆธใๅบใ (8 ใใผใใซ)
ๅๅพใ่ชญใฟ่พผใฟใซๅคฑๆใใใใฃใผใใฏใ่ญฆๅใๅบใใฆ้ฃใฐใใพใใใใ ใใGTFS ใฎ
่ทฏ็ทใ 1 ใคใๅใ่พผใใชใใฃใๅ ดๅใฏใใในใไธธใใจๆฌ ใใใใผใฟใๅบใใชใใใ
ๅคฑๆใใใพใใใใใญใค็จใฎใฏใผใฏใใญใผใงใฏใใใฃใผใใ 1 ใคใงใ้ฃใฐใใๆ็นใง
ๅคฑๆใใใฆใใพใ (fail-on-missing-bus-feeds)ใ
station_station_types.id ใฏใใฎใพใพๅ่ป้ ใจใใฆไฝฟใใใใใใ่กใฎ้ ๅบใซ
ๆๅณใใใใพใใๆธใๅบใใจใใฏๅฟ
ใ id ใฎๆ้ ใซไธฆในใพใใ
Station.trackDistanceFromPrevious ใฏใ่ฟใ้ง
ใฎไธฆใณใง็ดๅใซใใ้ง
ใใใฎ
็ท่ทฏใฎ้ทใ (ใกใผใใซ) ใงใใtrainRoute ใฎ distanceFromPrevious ใฏ้ง
ใฎๅบงๆจ
ใฉใใใฎ็ด็ท่ท้ขใชใฎใงใใซใผใใฎๅคใๅบ้ใงใฏๅฎ้ใใ็ญใๅบใพใใใใกใใฏใใฎ
ไปฃใใใซใไน่ป่ท้ขใ้่จใใใฏใฉใคใขใณใใไฝฟใใพใใ
ๅคใฏใๅฝๅๆฐๅคๆ
ๅ ฑใฎ้้ใใผใฟ (N02ใๅฝๅไบค้็ใCC BY 4.0) ใฎ็ท่ทฏๅบ้
(RailroadSection) ใใ preprocessor ใงๆฑใใgenerated/connections.csv
(station_cd1 < station_cd2ใๆดๆฐใกใผใใซ) ใซๆธใๅบใใพใใ
- ใฐใฉใ: ็ท่ทฏๅบ้ใฎ LineString ใใ้ ็นใๅบงๆจ (ๅฐๆฐ็ฌฌ 5 ไฝ) ใงๅไธ่ฆใใ ็กๅใฐใฉใใซใใใN02-25 ใง้ ็น ็ด 38 ไธใ่พบ ็ด 38 ไธ
- ้ง
ใฎ็ต: API ใ่ฟใ้ง
ใฎไธฆใณใง้ฃใๅใ้้้ง
ใฎ็ตใ้ใใใไธฆใณใฏ่ทฏ็ทใฎ
(e_sort, station_cd)้ ใจ็ณป็ตฑใฎstation_station_types.id้ ใงใๅปๆญข้ง ใ ้คใใไธฆใณใจ้คใใชใไธฆใณใฎไธกๆนใไฝฟใใ็ฐ็ถ้่ปขใฎ็ณป็ตฑใฏใๆซๅฐพ้ง ใจๅ ้ ญ้ง ใ 3km ไปฅๅ ใชใ็ถใ็ฎใฎ็ตใๅซใใ (trainRouteใฏ็ถใ็ฎใใพใใใงๅใๅบใ ใใ)ใๅใ้ง ใฐใซใผใใฎ็ต (็ด้้่ปขใฎๅข็้ง ) ใฏ 0 ใซใใ - ้ง ใ็ท่ทฏใธๅฏใใ: ้ง ใใ 500m ไปฅๅ ใฎ่พบใใในใฆๅ่ฃใซใใ ใๅฏใใ่ท้ข ร 2 + ็ท่ทฏไธใฎ่ท้ขใใๆๅฐใซใชใ็ตใ Dijkstra ใงๆขใใๆใ ่ฟใ็ท่ทฏใ ใใซๅฏใใใจใๅคงใใช้ง ใงๅใไบๆฅญ่ ใฎๅฅ่ทฏ็ท (ๆฌ็บใฎๅพกๅ ็ญ็ทใจ ๅใคๆฉ็ทใชใฉ) ใซๅฏใฃใฆไนๆ้ง ใใพใใ้ ๅใใๅบใใใ
- ไบๆฅญ่
ใง็ตใ: ใพใไธก้ง
ใฎ่ทฏ็ทใฎไผ็คพใฎ็ท่ทฏใ ใใงๆธฌใใN02 ใฎไบๆฅญ่
ๅใจ
ไผ็คพๅ (
company_name_hใใใๆ ชๅผไผ็คพใใ้คใใใใฎ) ใ้ใไผ็คพใฏOPERATOR_ALIASESใงๅฏพๅฟใใใใไป็คพใฎ็ท่ทฏใ่ตฐใ่ทฏ็ท (ๅ้ธๆฐๅนน็ทใฎ ไธ่ถๅฆ้ซไปฅ่ฅฟใ็ธ้ใปJR็ด้็ทใชใฉ) ใฏใใใงใฏๅฏใใใใชใใฎใงใๅ จไบๆฅญ่ ใฎ ็ท่ทฏใงๆธฌใ็ดใ - ๆใกๅใใจไธ้: ็ท่ทฏไธใฎ่ท้ขใ็ด็ท่ท้ขใฎ 3 ๅใจ็ด็ท่ท้ข + 5km ใฎๅคงใใๆนใ ่ถ ใใใใ็ทๅฝขใ้ๅใใฆๅคงๅใใใใใฎใจใฟใชใใฆๆธฌใใชใใฃใใใจใซใใ (ๅฎๅจใฎๆๅคงใฏๆจๆฌก็ทใฎๅบ้ฒๅๆ นใไธไบ้ๅใฎ็ด 3.6 ๅ)ใ็ท่ทฏใฎ้ทใใฏ็ด็ท่ท้ขใใ ็ญใใชใใชใใฎใงใ้ง ใฎๅบงๆจใฎใใใง็ญใๅบใๅคใฏ็ด็ท่ท้ขใงๆใใ
2026 ๅนด 9 ๆๆ็นใฎใใผใฟใงใฏใ็ด 11,000 ็ตใฎใใก็ด 10,400 ็ตใ่จ็ฎใงใใ ๆธฌใใชใใฃใ็ด 290 ็ตใฎใปใจใใฉใฏ N02 ใซ็ท่ทฏใๆฎใฃใฆใใชใๅป็ทใฎ้ง ใงใใ (ๅถๆฅญไธญใฎ้ง ใฉใใใฏ 2 ็ต)ใๅฎใญใญใจๆฏในใใจใๆฑๆตท้ใปๅฑฑ้ฝๆฐๅนน็ทใฎๆฑไบฌใๅๅคใ 1,066km (ๅฎใญใญ 1,069km)ใ็ณๅ็ทใฎใใใ ใๆฐๅพใ 33.8km (ๅถๆฅญใญใญ 33.8km) ใงใใ preprocessor ใฎๅฎ่กใฏ 1 ็งใปใฉใงใใ
data/8!connections.csv ใซๆธใใ่กใฏ่จ็ฎ็ตๆใใๅชๅ
ใใพใใN02 ใฎ็ทๅฝขใ้ง
ใฎ
ๅบงๆจใฎใใใงๅคใๅฎ้ใจๅใใชใๅบ้ใฏใใใใง็ดใใพใใ
Worker ใงใฏ build.rs ใ 1 ่ก = i32 3 ใคใฎๅบๅฎ้ทใใคใใช (connections.binใ
็ด 130KB) ใซๅคๆใใ็ตใฎๆ้ ใซไธฆในใพใใใฉใณใฟใคใ ใฏ็ดขๅผใไฝใใใซไบๅๆข็ดขใง
ๅผใใฎใงใใณใผใซใในใฟใผใใฎ่ฒป็จใฏๅขใใพใใใๅคใๅใใใฎใฏใไธฆใณใ่ฟใ
lineStationsใปlineGroupStationsใปtrainRouteใปstations(ids) ใ ใใงใ
(ไปใฎๅใๅใใใงใฏ็ดๅใฎ้ง
ใ็กใใฎใง null)ใstations(ids) ใฏ้ง
ใๆๅฎใใ
ID ใฎ้ ใซ่ฟใใฎใงใ็ต่ทฏใฎ้ง
ใ้ ใซๆธกใใฏใฉใคใขใณใ (MobileApp ใฎ sids ๅฝขๅผใฎ
ใใฃใผใใชใณใฏ) ใฏใใใฎ้ ใง้ฃใๅใ็ตใฎ้ทใใๅใๅใใพใใ้ไธญใฎ้ง
ใ็ใใ
ไธฆใณใชใฉใ็ท่ทฏใฎใใผใฟไธใง้ฃใๅใใชใ็ตใฏ null ใงใใtrainRoute ใ legs ใงๅผใใ ๅ ดๅใฏใๅๅบ้ใฎ
ๅ
้ ญใฎ้ง
ใ null ใซใชใใพใใ
N02 ใฏ data/N02-25/ ใซใญใฃใใทใฅใใพใ (git ็ฎก็ๅคใCI ใงใฏ actions/cache ใง
ไฟๅญใใพใ)ใๅๅพใงใใชใใฃใๅ ดๅใpreprocessor ใฏๅคฑๆใใพใใ็ใไธใใใจใใฏ
preprocessor/src/track/mod.rs ใฎ URL ใจใญใฃใใทใฅๅ
ใ.github/actions/build-worker/action.yml
ใฎใญใฃใใทใฅใๆใใฆๅคใใๆธฌใใชใใฃใ็ตใฎไปถๆฐใ็ขบใใใฆใใ ใใใ
ใใน็ฑๆฅใฎใฌใณใผใใซใฏใFNV-1a ใใใทใฅใไฝฟใฃใฆใ้้ใจ้ใชใใชใๅคๅใฎ
ใณใผใใๆฑบๅฎ็ใซๅฒใๅฝใฆใพใใๅฎ่กใใใใณใซๅใๅคใซใชใใชใใใฐใชใใชใ
ใฎใงใDefaultHasher ใฏไฝฟใใพใใใ
| ๅฏพ่ฑก | ๅคๅ | ใใใทใฅใฎๅ ฅๅ |
|---|---|---|
line_cd |
100,000,000ใ (1,000 ไธไปถๅ) | route_id |
station_cd |
200,000,000ใ (1 ๅไปถๅ) | (stop_id, route_id) |
station_g_cd |
200,000,000ใ (1 ๅไปถๅ) | stop_id (ไธไธ็ทใชใฉใฎใใผใซใใพใจใใไปฃ่กจใฎๅ็ๆ) |
type_cd |
100,000,000ใ (1 ๅไปถๅ) | (route_id, shape_id) |
line_group_cd |
100,000,000ใ (1 ๅไปถๅ) | (route_id, shape_id) |
ใใใทใฅใชใฎใงใๅฅใ
ใฎๅ
ฅๅใๅใๅคใซใชใใใจใใใใพใ (ๅฎใใผใฟใงใใ้ฝๅถ
ใในใจ่ฅฟๆญฆใในใฎๅ็ๆใง station_cd ใ 1 ไปถ่ก็ชใใฆใใพใใ)ใstation_g_cd
ไปฅๅคใฏใ่ก็ชใใใๆฌกใฎ็ฉบใๅคใซใใใใฆๅฟ
ใไธๆใซใใพใใstation_g_cd ใฏ
ๅ็ๆใใพใจใใใใใฎใญใผใงไธๆใงใใๅฟ
่ฆใใชใใใใใใใใพใใใ
| ๅคๆฐ | ๅนๆ |
|---|---|
ODPT_ACCESS_TOKEN |
้ฝๅถใในไปฅๅคใฎใใฃใผใใฎๅๅพใซๅฟ
่ฆใๆช่จญๅฎใฎๅ ดๅใฏใๅฑ้ๆธใฟใฎ GTFS (data/*-GTFS/) ใจ 7 ๆฅไปฅๅ
ใฎ ODPT JSON ใฎใญใฃใใทใฅใ ใใไฝฟใใใฉใกใใใชใใใฃใผใใฏ่ญฆๅใๅบใใฆ้ฃใฐใ |
DISABLE_BUS_FEATURE |
true (ใพใใฏ 1) ใซใใใจใในใๅใ่พผใพใชใ (้้ใฎใฟ) |
PostgreSQL ใฎใฏใจใชใฏใๆฌกใฎใใใซ็ฝฎใๆใใฆใใพใใ
| PostgreSQL | Worker |
|---|---|
point(lat,lon) <-> point() |
ใฐใชใใ็ดขๅผ (Grid) ใงๆข็ดขๅๅพใฎๅ
ๅดใ ใใ่ชฟในใhaversine ใง่ท้ขใ่จ็ฎใใ |
pg_trgm ใฎ GIN ใคใณใใใฏใน |
ๅ
จไปถ่ตฐๆปใจ contains() |
station_station_types ใฎ JOIN |
HashMap ใซใใ็ดขๅผ |
connections ใฎๅ็
ง |
ไธฆในๆธใฟใฎๅบๅฎ้ทใใคใใชใไบๅๆข็ดข (้ง ้ใฎ็ท่ทฏใฎ้ทใ) |
ๅบงๆจใซใใๆค็ดขใฏใsrc/index.rs ใฎ 2 ใคใฎ้ขๆฐใง่กใใพใใ
nearest: ่ฟใ้ ใซlimitไปถใ่ฟใใพใ (stationsNearby)within_radius: ๅๅพๅ ใฎใใฎใใในใฆ่ฟใใพใ (้้้ง ใซ่ฟๅใฎใในๅใ ไปใใใจใ)
ใฉใกใใๅ
จไปถใฏ่ตฐๆปใใใ้้ใจใในใงๅฅใ
ใซไฝใฃใใฐใชใใ็ดขๅผ (Grid) ใ
ไฝฟใใพใใใฐใชใใใฏ็ทฏๅบฆ็ตๅบฆ 0.05ยฐ (็ด 5.5km) ๅๆนใฎใในใงใใในใใจใฎ้ง
ใ
CSR ๅฝขๅผใงๆใกใพใใ
nearest ใฏๅๅพ 1km ใใๆขใๅงใใๅๅพใฎๅ
ๅดใซ limit ไปถใใใใชใใใฐ
ๅๅพใ 4 ๅใใคๅบใใพใใๅๅพใฎๅ
ๅดใซ limit ไปถใใใใฐใใใฎๅคๅดใฎ้ง
ใ
ไธไฝ limit ไปถใซๅ
ฅใใใจใฏใชใใใใงใใ็ดขๅผใฎ็ฏๅฒๅ
จไฝใ่ฆใฃใฆใ่ถณใใชใ
ๅ ดๅใฏใใใฎๆ็นใฎ็ตๆใ่ฟใใพใใtransportType ใ็็ฅใใๅ ดๅใฏใ็งป่กๅใฎ
SQL (ORDER BY transport_type, distance) ใจๅใใใ้้้ง
ใๅ
ใซใใในๅใ
ๅพใซไธฆในใพใใไปถๆฐใฎไธ้ใฏไธฆในใๅพใฎๅ
จไฝใซใใใใฎใงใใพใ้้้ง
ใงๅใใ
ๆฎใใฎๆ ใฎๅใ ใใในๅใๆขใใพใใ่ท้ขใๅใๅ ดๅใฏ station_cd ใฎ้ ใซ
ไธฆในใ็ตๆใไธๅฎๅฎใชใฝใผใใซๅทฆๅณใใใชใใใใซใใฆใใพใใ
้้้ง ใ่ฟใใฏใจใชใงใฏใ่ฟๅใฎใในๅใไปใใใใใซ้ง ใใจใซๅบงๆจๆค็ดขใ ่ตฐใใพใใๅบงๆจใซใใๆค็ดขใ่ฟฝๅ ใใใจใใฏใๅ จไปถ่ตฐๆปใงใฏใชใใใฎใฐใชใใ ็ดขๅผใไฝฟใฃใฆใใ ใใใ
ๅๅใซใใๆค็ดข (search_by_name) ใฏใ้ง
ๅใป่ชญใฟใปใญใผใๅญใปไธญๅฝ่ชใป้ๅฝ่ชใฎ
ใใใใใซ้จๅไธ่ดใใ้ง
ใใๅ
จไปถ่ตฐๆปใงๆขใใพใใpg_trgm ใฏ
LIKE '%...%' ใ้ซ้ๅใใใใใฎใคใณใใใฏในใงใ้กไผผๅบฆๆค็ดขใซไฝฟใฃใฆใใ
ใใใงใฏใใใพใใใใใฎใใ contains() ใงใ่ซ็็ใซๅใ็ตๆใซใชใใพใใ
ๆญฃ่ฆๅใซใฏ domain ๅฑคใฎ normalize_for_search ใใใฎใพใพไฝฟใใพใใ
station_station_types.csv ใฏ้้ใ ใใงใ 4 ไธ่กใ่ถ
ใ (data/ ใง 41,976
่ก)ใใในใๅซใใใจใใใซๅขใใพใใCSV ใฎใใผในใใณใผใซใในใฟใผใๆ้ใฎ
ๅคงๅใๅ ใใฆใใใฎใงใbuild.rs ใง 1 ่กใ i32 4 ใค (station_cdใ
type_cdใline_group_cdใpass) ใฎๅบๅฎ้ทใใคใใช (sst.bin) ใซไบๅๅคๆใใฆ
ใใพใใid ใฏไฟๅญใใใ่ชญใฟ่พผใฟๆใซ่ก้ ใง 1 ใใๆฏใ็ดใใพใใ
connectedRoutes ใฏใไนๆๆกๅ
ใขใใชใจๅใใใใซใไนๆใๅซใ็ต่ทฏใ่ชๅใง
ๆขใใพใใroutes / routeTypes ใๅบ็บ้ง
ใจๅฐ็้ง
ใฎไธกๆนใซๅ่ปใใ็ณป็ตฑใ ใใ
่ฟใใฎใซๅฏพใใconnectedRoutes ใฏ่คๆฐใฎ็ณป็ตฑใไนใ็ถใ็ต่ทฏใ่ฟใใพใใ
ๅฎ่ฃ
ใฏ stationapi/src/domain/route_search.rs (็ด็ฒใชใญใธใใฏ) ใซใใใพใใ
ๆข็ดขใขใซใดใชใบใ ใฎๅ
้จ่จญ่จ (ใใผใฟๆง้ ใ่ตฐๆปใฎ่จ็ฎๅผใๆๅใใไปฃๆฟ็ต่ทฏใฎ
็ๆใๆฑบๅฎๆง) ใฏ ไนๆ็ต่ทฏๆข็ดข (RAPTOR) ใฎ่จญ่จ ใซ
ใพใจใใฆใใพใใ
ใขใใชใฏๅ่ป (็ณป็ตฑ) 1 ๆฌใใจใซใใ็จฎๅฅใ้ธใถ โ lineGroupStations ใง็ณป็ตฑ
ๅ
จไฝใฎ้ง
ใๅๅพใใ โ LCD ่กจ็คบใๅใใใใจใใๆตใใงๅไฝใใพใใไนๆ็ต่ทฏใ
ใใฎๆตใใงๆฑใใใใใ็ต่ทฏใฏๅบ้ (legs) ใฎใชในใใจใใฆ่ฟใใพใใๅๅบ้ใฏใ
ใใฎๅบ้ใงไน่ปใงใใ็จฎๅฅ (trainTypesใrouteTypes ใจๅใๅฝขใงใๅฎๅจใใ
groupId ใๆใค) ใจใไน่ป้ง
ใป้่ป้ง
(Station) ใๆใกใพใใไน่ป้ง
ใป้่ป้ง
ใฏ
ๆข็ดขใงไฝฟใฃใ็ณป็ตฑใ่ตฐใ่ทฏ็ทใฎ้ง
ใชใฎใงใไนๆ้ง
ใงใฏใๅใฎๅบ้ใฎ้่ป้ง
ใจๆฌกใฎ
ๅบ้ใฎไน่ป้ง
ใใๅใ้ง
ใฐใซใผใใซๅฑใใๅฅใฎ้ง
ใซใชใใใจใใใใพใ
(ไพ: ไธธใๅ
็ทใฎ่ตคๅ่ฆ้ โ ๅ่ต้็ทใฎๆฐธ็ฐ็บ)ใ
connectedRoutes(fromStationGroupId: Int!, toStationGroupId: Int!, viaLineId: Int, sortBy: ConnectedRouteSort): [ConnectedRoute!]!
enum ConnectedRouteSort { Recommended ArrivalTime TransferCount }
type ConnectedRoute { legs: [RouteLeg!] }
type RouteLeg { trainTypes: [TrainType!] fromStation: Station toStation: Station stationGroupIds: [Int!] }stationGroupIds ใฏใไน่ป้ง
ใใ้่ป้ง
ใพใงใฎ้ง
ใฐใซใผใ ID ใ้ฒ่ก้ ใซไธฆในใ
ใใฎ (้้้ง
ใๅซใ) ใงใๆข็ดขใงไฝฟใฃใ็ณป็ตฑใฎ้ง
ใฎไธฆใณใใใฎใพใพ่ฟใใพใใ
้ง
ID ใงใฏใชใ้ง
ใฐใซใผใ ID ใซใใฆใใใฎใฏใใขใใชใๅบ้ใใจใซ้ธใถ็จฎๅฅ
(ๆขๅฎใฏๅ้ง
ๅ่ป) ใใๆข็ดขใงไฝฟใฃใ็ณป็ตฑใจใฏๅฅใฎ่ทฏ็ทใ่ตฐใใใจใใใใใใงใใ
้ง
ID ใฏ่ทฏ็ทใใจใซ็ฐใชใใพใใใ้ง
ใฐใซใผใ ID ใชใใฉใฎ็จฎๅฅใฎ้ง
ใชในใใจใ
็
งๅใงใใพใใใขใใชใฏใใฎไธฆใณใซๆฒฟใฃใฆใ้ธใใ ็จฎๅฅใฎ้ง
ใชในใใใ้ง
ใ
ๅใๅบใใฎใงใ็ฐ็ถ็ทใงใฉใกใๅใใซใใใใใขใใชๅดใงๅคๆญใใๅฟ
่ฆใฏ
ใใใพใใใๅใ้ง
ใฐใซใผใใ 2 ๅ็พใใ็ณป็ตฑ (ๅคงๆฑๆธ็ทใฎ้ฝๅบๅ) ใงใฏใ
็ดๅใซๅใๅบใใ้ง
ใซ้ฃๆฅใใใปใใ้ธใณใพใใ
ๆข็ดขใงใฏใๅ่ป้ง
ใๅใไธฆ่ก็จฎๅฅ (ไธญๅคฎ็ทใฎๅฟซ้ใจ้ๅคๅฟซ้ใชใฉ) ใ 1 ใคใฎ็ต่ทฏใซ
ใพใจใใไปฃๆฟ็ต่ทฏใๅๆข็ดขใใใจใใใใใใใพใจใใฆ้คๅคใใพใใใใฎใพใพใงใฏ
ไธฆ่ก็จฎๅฅใใฌในใใณในใซไธๅบฆใ็พใใใ็จฎๅฅไธ่ฆง (TrainTypeListModal) ใ่กจ็คบใใฆ
ๅ้ง
ๅ่ปใๆขๅฎใง้ธใถใจใใใ็พๅจใฎใขใใชใฎๆๅใ็ถญๆใงใใพใใใใใใง
trainTypes ใซใฏใใใฎๅบ้ใงไน่ปใงใใ็จฎๅฅใใในใฆ่ฟใใพใใไธญ่บซใฏ
routeTypes(ไน่ป้ง
ใฐใซใผใ, ้่ป้ง
ใฐใซใผใ, ้่ป้ง
ใฎ่ทฏ็ท) ใฎ็ตๆใจๅไธใงใ
ๅ่ป้ง
ใๅใ็จฎๅฅใฎ้็ดใ่ทฏ็ทใฎไปไธใไธฆใณ้ ใ routeTypes ใจๅใใงใ (ๅใ
้ขๆฐใๅผใณๅบใใฆใใพใ)ใๆข็ดขใ้ธใใ ไปฃ่กจใฎ็จฎๅฅใๆจๅฎๆ่ฆๆ้ใไนๆๅๆฐใฏ
ไธฆในๆฟใใซใ ใไฝฟใใพใใใขใใชใงใฏไฝฟใใชใใใใAPI ใงใฏ่ฟใใพใใใ
viaLineId ใฏ routeTypes ใจๅๆงใซใๆค็ดข็ตๆใงใฟใใใใ้ง
ใฎ่ทฏ็ทใๆใใพใใ
ๆๅฎใใใจใ็ฎ็ๅฐใซใใฎ่ทฏ็ทใฎ้ง
ใงๅฐ็ใใ็ต่ทฏ (ๆๅพใฎๅบ้ใใใฎ่ทฏ็ทใ่ตฐใ
็ต่ทฏ) ใ ใใซ็ตใ่พผใฟใพใใ
sortBy ใฏ็ต่ทฏใฎไธฆใณ้ ใงใใๆจๅฎๆ่ฆๆ้ใจไนๆๅๆฐใฏ API ใง่ฟใใชใใฎใงใ
ไธฆในๆฟใใฏใตใผใใผๅดใง่กใใพใใใฉใใ้ธใใงใ่ฟใ็ต่ทฏใฎ้ๅใฏๅคใใใใ
ไธฆใณใ ใใๅคใใใพใใ
sortBy |
ไธฆใณ |
|---|---|
Recommended (็็ฅๆ) |
ใใใใ้ ใใ่ฉไพกๅค (ๆๅใฎๅ่ปใฎๅพ ใกๆ้ใๅซใๆ่ฆๆ้ใฎ่ฆ่พผใฟ) + ไนๆ 1 ๅใซใคใ 5 ๅใใฎๅฐใใ้ (ๅพ่ฟฐ) |
ArrivalTime |
ๅฐ็ใฎๆฉใ้ ใๅใใชใไนๆใฎๅฐใชใ้ |
TransferCount |
ไนๆใฎๅฐใชใ้ ใๅใใชใๅฐ็ใฎๆฉใ้ |
ๅฐ็ใฎๆฉใ้ ใฏใestimateArrivalTimes ใจๅใๅฎ็พฉใฎๆ่ฆๆ้ (ๆๅใฎๅ่ปใฎ
ๅพ
ใกๆ้ใฏๅซใใใไนๆใใจใซๅพๆญฉๆ้ใจไนๆๅ
ใฎๅพ
ใกๆ้ใๅ ใใ) ใงไธฆในใพใใ
ใใ ใใไธฆในๆฟใใซไฝฟใใฎใฏๆข็ดขใ้ธใใ ไปฃ่กจใฎ็จฎๅฅใงใฎ่ฆ่พผใฟใงใใใขใใชใ
ๅบ้ใใจใซๅฅใฎ็จฎๅฅ (ๆขๅฎใฎๅ้ง
ๅ่ปใชใฉ) ใ้ธใใง estimateArrivalTimes ใง
ๆฑใใๅฐ็่ฆ่พผใฟใจใฏใไธฆใณใไธ่ดใใชใใใจใใใใพใใใญใผใๅใ็ต่ทฏๅๅฃซใฏใ
ใใใใ้ ใฎใพใพไธฆใณใพใใ
็ณป็ตฑ (line_group_cd) ใใจใฎๅ่ป้ง
ใฎไธฆใณใ 1 ใคใฎใใฟใผใณใจใใ้ง
ใฐใซใผใ
(station_g_cd) ใไนๆใฎใใผใใจใใพใใ้ง
้ใฎๆ่ฆๆ้ใซใฏ
arrival_estimation ใฎๆจๅฎๅคใไฝฟใใพใใ็ฐ็ถ็ทใฏ 2 ๅจๅใซๅฑ้ใใ็ถใ็ฎใ
ใพใใไน่ปใๅใ้
ๅใง่จ็ฎใงใใใใใซใใฆใใพใใๅฏพ่ฑกใฏ้้ใ ใใงใใในใฏ
ๅซใฟใพใใใ
็ถฒใฎๆง็ฏใซใฏๅ
จ็ณป็ตฑใฎ้ง
ใจๆ่ฆๆ้ใฎๆจๅฎใๅฟ
่ฆใงใใใคใใฃใ็ฐๅขใง็ด 190ms
ใใใใพใ (data/*.csv ใฎ 1,185 ็ณป็ตฑใป41,706 ่กใๆ้ใฎๅๅใ Station ใฎ
็ตใฟ็ซใฆใๆฎใๅๅใๆจๅฎ)ใใใฎใใ่ตทๅๆใซใฏๆง็ฏใใใๆๅใซ
connectedRoutes ใๅผใฐใใใจใใซ OnceLock ใซๆง็ฏใใisolate ใ็ใใฆใใ
้ใฏไฝฟใๅใใพใใ
ๆๅป่กจใฎใใผใฟใๆใใชใใใใ้่ก้ ปๅบฆใซๅบใฅใ RAPTOR ใงๆข็ดขใใพใใ ใฉใฆใณใ k ใงใฏใk ๆฌ็ฎใฎๅ่ปใซไนใฃใๆ็นใใงใฎๆ่ฏๅคใๆฑใใๅใฎใฉใฆใณใใง ๅคใๆนๅใใ้ง ใ้ใใใฟใผใณใ ใใ่ตฐๆปใใพใใๅใฉใฆใณใใงใฎ็ฎ็ๅฐใฎๅคใใ ใใฎใพใพใk ๆฌไปฅๅ ใฎไน่ปใงๅฐ้ใงใใๆ่ฏๅคใใซใชใใฎใงใๆ่ฆๆ้ใจไนๆๅๆฐใฎ ใใฌใผใ่งฃใๅพใใใพใใ
่ฉไพกๅค (็ง) ใฏๆฌกใฎๅ่จใงใใ
| ้ ็ฎ | ๅค |
|---|---|
| ไน่ปๆ้ | arrival_estimation ใฎๆจๅฎๅค (ๅ่ปๆ้ใป้้ใๅซใ) |
| ไน่ปใใจใฎๅพ ใกๆ้ | ็นๆฅใปๆฐๅนน็ท 15 ๅ / ๆฅ่กใปๆฐๅฟซ้ใฏใฉใน 5 ๅ / ใใฎไป 3 ๅ |
| ไนๆใฎๅพๆญฉๆ้ | 3 ๅ |
ๅพ ใกๆ้ใๅ ใใชใใจใๆฌๆฐใฎๅฐใชใ็นๆฅใใ็ด้ใง้ใใใจ่ฉไพกใใใ ๆฑไบฌ โ ๆธ่ฐทใงๅฑฑๆ็ทใใๆ็ฐใจใฏในใใฌในใๅงใใฆใใพใใพใใ
ใใฌใผใ่งฃใซใฏใๆ้ใฎ็ต่ทฏใจไนๆใๆใๅฐใชใ็ต่ทฏใใๅซใพใใพใใใใใใงใ ่ฆใคใใฃใ็ต่ทฏใฎๅบ้ใ 1 ใคใใค็ฆๆญขใใฆๅๆข็ดขใใพใ (Yen ใฎ k ๆ็ญ็ต่ทฏ ใขใซใดใชใบใ ใฎ็ฐก็ฅ็ใๆข็ดขใฏๅๅใๅซใใฆๆๅคง 8 ๅ)ใ็ฆๆญขใใใฎใฏใใฎๅบ้ใฎไธฆ่ก็ณป็ตฑ (ๅใ ไน่ป้ง ใจ้่ป้ง ใซๅ่ปใใๅฟซ้ใปๅๅใชใฉ) ใงใๅบ้ๅ ใฎใฉใฎ้ง ใใใไน่ปใงใ ใชใใใใซใใพใใไน่ป้ง ใ ใใ็ฆๆญขใใใจใๅฅใฎๅ่ปใง 1 ้ง ้ฒใใงใใๅใ ๆฐๅนน็ทใซไนใ็ต่ทฏใๅบใฆใใฆใใพใใใใงใใ
้ ไฝใฏใ่ฉไพกๅค + ไนๆ 1 ๅใซใคใ 5 ๅใใงๆฑบใใๆๅคง 6 ไปถใ่ฟใใพใใไปฃๆฟ ็ต่ทฏใฎใใกใใใฎ้ ไฝใฎๅคใๆ่ฏใฎ็ต่ทฏใฎ 1.15 ๅ + 15 ๅใ่ถ ใใใใฎใจใ ไนๆๅๆฐใใใฌใผใ่งฃใฎๆๅคไนๆๅๆฐใใ 2 ๅไปฅไธๅคใใใฎใฏๆจใฆใพใใไน่ป ๆฌๆฐใๅขใใใฆใ้ ไฝใฎๅคใ่ฏใใชใใชใใใฌใผใ่งฃ (1 ๅ็ธฎใใใใใซไนๆใ ้ใญใ็ต่ทฏ) ใๆจใฆใพใใ
ไปฃๆฟ็ต่ทฏใฎใใกใๅฅใ
ใฎๅบ้ใงๅใ้ง
ใฐใซใผใใซๅ่ปใใใใฎใๆจใฆใพใใๅบ้ใ
็ฆๆญขใใฆๅๆข็ดขใใใจใใ1 ้ง
ๆปใฃใฆๅใๅ่ปใซไนใ็ดใใ้ๆปใใฎ็ต่ทฏใไปฃๆฟ
็ต่ทฏใจใใฆๅบใฆใใใใใงใ (ไพ: ๅคงๅฎฎใใๅๅใธ่กใใๅคงๅฎฎใซๅ่ปใใๅ่ปใง
ๆฑไบฌใธๅใใ)ใ้้ใใ้ง
ใฏๆฐใใพใใ (ๆฅ่กใง้้ใใ้ง
ใซใๅ
ใฎ้ง
ใใ
ๆปใใฎใฏๅฎ้ใซใใไนใๆนใงใ)ใ1 ใคใฎๅบ้ใฎไธญใงๅใ้ง
ใซ 2 ๅๅ่ปใใใฎใฏ
ๅฎๅจใใ้่ก (ๅคงๆฑๆธ็ทใฎ้ฝๅบๅใชใฉ) ใชใฎใงใ้คๅคใใพใใใๅๅๆข็ดขใฎ
ใใฌใผใ่งฃ (ๆ้ฉ่งฃ) ใซใฏใใฎ้คๅคใ้ฉ็จใใพใใใ้ฉ็จใใใจใ้ๆปใใงใใ
ๅฐ้ใงใใชใ้ง
ใใstationsByName ใงใฏใ่กใใ้ง
ใใจใใฆ่ฟใใฎใซใ็ต่ทฏใ
0 ไปถใซใชใฃใฆใใพใใใใงใใ
ใฉใกใใ legs: [RouteLegInput!] ใๅใๅใใไนๆ็ต่ทฏๅ
จไฝใ้ใใๅคใ
่ฟใใพใใlegs ใซใฏใconnectedRoutes ใฎๅๅบ้ใฎ trainTypes ใใ้ธใใ
็จฎๅฅใฎ groupId ใจใใใฎๅบ้ใฎ fromStation.idใปtoStation.id ใๆธกใใพใใ
็ต่ทฏ ID ใฏๅญๅจใใชใใฎใงใใฏใฉใคใขใณใใ็ต่ทฏใๅบ้ใฎไธฆใณใจใใฆๆธกใใพใใ
้ธใใ ็จฎๅฅใใๅบ้ใฎไน่ป้ง
ใป้่ป้ง
ใจใฏๅฅใฎ่ทฏ็ทใฎ้ง
ใซๅ่ปใใใใจใ
ใใใพใ (ใใจใใฐไน้้ง
ใฏไธญๅคฎ็ทๅฟซ้ใฎไธ้ทนใ ใใ้ธใใ ๅ้ง
ๅ่ปใฏไธญๅคฎใป
็ทๆญฆ็ทใฎไธ้ทนใซๅ่ปใใใใชใฉ)ใใใฎใใใ็ณป็ตฑใซๅซใพใใชใไน้้ง
ใฏใๅใ
้ง
ใฐใซใผใใฎ้ง
ใงไปฃ็จใใพใใstation_cd ใไธ่ดใใ้ง
ใใใใฐใใใไฝฟใใ
ๅใ้ง
ใฐใซใผใใฎๅ่ฃใ่คๆฐใใๅ ดๅใฏใๅบ้ใๆใ็ญใใชใ็ตใฟๅใใใ้ธใณ
ใพใใ็ด้็ณป็ตฑใฏใๆฅ็ถ้ง
ใซๅใ้ง
ใฐใซใผใใฎ้ง
ใ 2 ่กๆใคใใใงใ (ไพ:
ๅฎ้ฝๅฎฎ็ทใฎไธ้ใจไธ้ๆฑไบฌใฉใคใณใฎไธ้)ใ
input RouteLegInput { lineGroupId: Int! fromStationId: Int! toStationId: Int! }estimateArrivalTimes: ๅๅบ้ใๆๅฎใใใ็ณป็ตฑใ ใใงๆจๅฎใ (ไธก้ง ใซๅ่ป ใใๅฅใฎ็ณป็ตฑใฏไฝฟใใพใใ)ใๅบ็บ้ง ใใใฎ็ดฏ็ฉๆ้ใงใคใชใใ 1 ๆฌใฎ็ต่ทฏใ ่ฟใใพใ (็ณป็ตฑใใพใใใฎใงidใฏ็ฉบใงใ)ใไนๆ้ง ใฏใๅใฎๅบ้ใฎ้่ป้ง ใจ ๆฌกใฎๅบ้ใฎไน่ป้ง ใฎ 2 ่กใซใชใใพใใไน่ป้ง ใฎ่กใซใฏใใๅพๆญฉ 3 ๅๅพใซๅฐ็ใใ ไนๆๅ ใฎ็จฎๅฅใฎๅพ ใกๆ้ใ็ตใฃใฆใใๅบ็บใใใๅคใๅ ฅใใพใใใใฎ่ฆ่พผใฟใฏใconnectedRoutesใฎไธฆในๆฟใใซไฝฟใใใฎ (ๅพๆญฉ 3 ๅใจ็จฎๅฅใใจใฎๅพ ใกๆ้) ใจ ๅใใงใใtrainRoute: ๅบ้ใใจใฎ่ตฐ่กๅบ้ใ้ ใซใคใชใใพใใๅบ้ใใจใซๅฅใฎๅ่ป ใชใฎใงใๅๅบ้ใฎๆๅใฎ้ง ใฎdistanceFromPreviousใฏ 0 ใซใชใใ้้้ง ใ ใใใ (ๅช็ญ็จฎๅฅใฎ้ๅบฆใไฝฟใใ) ใๅบ้ใใจใซๅคๅฎใใพใใ
trainRoute ใฏใๅบ้ใฎๅคใใฉใฎใขใใซใงๅบใใใ model: TrainRouteModel ใง
้ธในใพใใ
Legacy(็็ฅๆ): ่ฟฝๅ ใใๆ็น (#1568) ใฎใขใใซใงใใๆ้ซ้ๅบฆใจๅ ๆธ้ใฏdto::simulation::resolve_speed_profileใๆฑบใใๅฐ็ใปๅบ็บใฎ่ฆ่พผใฟ (arrivalCumulativeMinutes/departureCumulativeMinutes) ใฏnullใงใใ ้ ๅธๆธใฟใฎ MobileApp ใฎใชใผใใขใผใใใใฎๅคใง่ตฐใใฎใงใๅคใๅคใใพใใใ้ๅบฆใฎ่ผๆญฃใฏใ ๅฐ็ๆ้ๆจๅฎใฎ่ผๆญฃใๆฑใ็ดใๅใฎ่กจใdomain/legacy_speed_table.rsใซๅ็ตใใฆ ไฝฟใใพใใEstimated: ๅฐ็ๆ้ๆจๅฎ (arrival_estimation) ใฎใขใใซใงใMobileApp ใฎ ใชใผใใขใผใใจ GPX ใฎ็ๆใไฝฟใใพใใ่ฟใ้ง ๅใซๆจๅฎใๆใใๅ่ปใป้้ใๆ้ซ้ๅบฆใ ๅ ๆธ้ใๆจๅฎใไฝฟใฃใๅคใซ็ฝฎใๆใใฆใๅฐ็ใปๅบ็บใฎ่ฆ่พผใฟใๅ ฅใใพใใ่ฆ่พผใฟใฏใ ๅใๅบ้ใฎestimateArrivalTimesใจๅใๅคใงใ (legsใๆธกใใใจใใฏใๅใlegsใๆธกใใestimateArrivalTimesใจๅใๅค)ใใในใฎ้ง ใๅซใ็ต่ทฏใฏๆจๅฎใฎ ใขใใซใฎๅฏพ่ฑกๅคใชใฎใงใLegacyใจๅใๅคใ่ฟใใพใใ
2 ใคใฎใขใใซใฏใๅ ๆธ้ใ้่ปขไฝ่ฃ็ใๅ่ปๆ้ใ่ผๆญฃใใผใใซใ้ง
้ใฎ่ท้ขใ้ใ
ใพใใEstimated ใฏใ็ท่ทฏใฎ้ทใ (connections) ใใใ้ง
้ใงใฏใใใ่ตฐ่ก่ท้ขใซ
ไฝฟใใ็กใ้ง
้ใ ใ็ด็ท่ท้ข ร ่ฟๅไฟๆฐใง่ฆ็ฉใใใใใฎ่ท้ขใงๆฑใ็ดใใ่ผๆญฃ
(speed_table / segment_speed_table) ใไฝฟใใพใใestimateArrivalTimes ใๅใ
่จ็ฎใงใใไนๆ็ต่ทฏๆข็ดข (connectedRoutes) ใฎๆ่ฆๆ้ใ ใใฏใๅ
ใฎ่จ็ฎ (็ด็ท่ท้ข ร
่ฟๅไฟๆฐใจใdomain/legacy_speed_table.rs ใฎๅ
ใฎ่ผๆญฃ) ใฎใพใพใงใใใใฎใใใ
็ต่ทฏๆค็ดขใฎๆ่ฆๆ้ใจ ETA ใฏไธ่ดใใพใใใLegacy ใฎๅคใงๅฐๅฝขใฎ้ๅบฆใใญใใกใคใซใไฝใฃใฆ่ตฐใใใใจใ
estimateArrivalTimes ใใ็ญใๆ้ใง่ตฐใๅใใพใ (#1709)ใๆ่ฆๆ้ใๆจๅฎใซ
ๅใใใใใฏใฉใคใขใณใใฏใEstimated ใฎ่ฆ่พผใฟใไฝฟใใพใใ
ๅบ้ใฎๅใๅบใใซใฏไธก่
ใงๅใ้ขๆฐใไฝฟใใ็ฐ็ถ็ทใงใฏ็ถใ็ฎใใพใใ็ญใใปใใฎ
ๅผงใ้ธใถใฎใงใไธก่
ใฎ้ง
ใฎไธฆใณใฏไธ่ดใใพใ (lineGroupId ใๆๅฎใใ
trainRoute ใฏใๅพๆฅใฉใใๆ ผ็ด้ ใงๅใๅบใใพใ)ใๆฌกใฎใใใใใซๅฝใฆใฏใพใ
ๅ ดๅใฏใจใฉใผใซใชใใพใใ
- ๅบ้ใใคใชใใฃใฆใใชใ (ๅใฎๅบ้ใฎ้่ป้ง ใจๆฌกใฎๅบ้ใฎไน่ป้ง ใใๅฅใฎ ้ง ใฐใซใผใใซใใ)
- ๅบ้ใฎๆฐใ 6 (
MAX_RIDESใconnectedRoutesใ่ฟใใใๆๅคงใฎไน่ปๅๆฐ) ใ ่ถ ใใ - ไธก็ซฏใฎ้ง
ใ
fromStationId/toStationIdใจไธ่ดใใชใ viaLineIdsใปdirectionIdใปlineGroupIdใจๅๆใซๆๅฎใใใฆใใ
ๅฐ็ๆ้ๆจๅฎ (estimateArrivalTimes ใจ trainRoute ใฎ Estimated) ใฎๆ่ฆๆ้ใใๅฎ้ใฎๅ่ปใฎๆ่ฆๆ้ใจๆฏในใๅบๆบใ
travel_times/cases.csv ใซ็ฝฎใใฆใใพใใ้ๅบฆใฎ่ผๆญฃใใผใใซใไธ่ฌๅใฏใ1 ใคใฎ่ทฏ็ทใซๅใใใฆๅคใใใจใๅใ
่ฆๅใไฝฟใใปใใฎ่ทฏ็ทใฎๆจๅฎใๅคใใใพใใๅคๆดใฎๅๅพใงๅ
จไฝใฎ่ชคๅทฎใๆธฌใใใใฎไป็ตใฟ
ใงใใ
cargo test -p stationapi-worker(src/travel_times.rs) ใฏใๅบๆบใใจใฎใๅฎ้ใฎ ๅ ธๅ็ใชๆ่ฆๆ้ใใใฎใใใใtravel_times/baseline.csvใฎ่จ้ฒใจๆฏในใๆชใใชใ ใจๅคฑๆใใพใใ่จ้ฒใฏๆฌ็ชใจๅใ็ๆใใผใฟใงไฝใใฎใงใๆฏในใใฎใฏgenerated/ใง ๅใใจใใ ใใงใใ CI ใงใฏbuild_worker.ymlใ็ๆใใผใฟใไฝใฃใฆใใ่ตฐใใใพใใmake travel-time-reportใฏใ็ๆใใผใฟใงๅใ Worker ใซๅใๅใใใฆๅ จไปถใฎ่ชคๅทฎใ ๅบใใพใใๆจๅฎใฎ่ฆๅใ่ผๆญฃใๅคใใ PR ใซใฏใๅคๆดๅใจๅคๆดๅพใฎใฌใใผใใ่ผใใพใใ
ๅบๆบใฎๆฑบใๆนใจ่จ้ฒใฎๆดๆฐๆนๆณใฏ travel_times/README.md ใซใใใพใใ
stationsByName ใซ fromStationGroupId ใๆๅฎใใใจใใใฎ้ง
ใใ่กใใ้ง
ใ ใใซ
็ตใ่พผใฟใพใใ่ฟใใฎใฏๆฌกใฎ้ง
ใงใใ
- ๅบ็บ้ง ใจ็ณป็ตฑใๅ ฑๆใใ้ง (็ด้ใง่กใใ้ง )
- ใฉใกใใใ็ณป็ตฑใๆใใชใๅ ดๅใฏใๅใ่ทฏ็ทใฎ้ง
- ไนใๆใใใฐใใใฎ้ง ใฎ่ทฏ็ทใฎๅ่ปใงๅฐ็ใงใใ้้้ง
3 ใค็ฎใฏใใviaLineId ใซใใฎ้ง
ใฎ่ทฏ็ทใๆๅฎใใฆ connectedRoutes ใๅผใถใจ
็ต่ทฏใ่ฟใ้ง
ใใจไธ่ดใใใฆใใพใใใใใใฎ้ง
ใฏๅบ็บ้ง
ใจ็ณป็ตฑใๅ
ฑๆใใชใใฎใง
line_group_cd ใฏ็ฉบใhasTrainTypes ใฏๅฝใซใชใใ็ด้ใง่กใใ้ง
ใจๅบๅฅ
ใงใใพใใ
ๅคๅฎใซใฏใconnectedRoutes ใจๅใ็ณป็ตฑใใไฝใฃใๆ่ฆๆ้ใๆใใชใ็ถฒ
(stationapi/src/domain/route_topology.rs ใฎ RouteTopology) ใไฝฟใใพใใ
ๅฟ
่ฆใชใฎใฏใใฉใฎ็ณป็ตฑใใฉใฎ้ง
ใซๅ่ปใใใใใ ใใชใฎใงใStation ใฎ็ตใฟ็ซใฆใ
ๆ่ฆๆ้ใฎๆจๅฎใใใใซ็ดขๅผใใ็ดๆฅๆง็ฏใงใใๆง็ฏๆ้ใฏ็ด 20ms (ๆ่ฆๆ้
ใคใใฎ็ถฒใฎ็ด 1/10) ใงใใRouteNetwork ใๅ
้จใซๅใ็ถฒใๆใฃใฆใใใ็ณป็ตฑใฎ
ๆดๅฝข (trim_pattern) ใจ้ง
ใฎ้ธใณๆน (line_group_rows) ใๅ
ฑๆใใฆใใพใใ
ไธก่
ใไธ่ดใใใใจใฏใๅฎใใผใฟใไฝฟใฃใใในใใง็ขบ่ชใใฆใใพใใ
ๅคๅฎใงใฏใไน่ป 6 ๆฌไปฅๅ
ใฎ็ฏๅฒใง็ณป็ตฑใๅน
ๅชๅ
ๆข็ดขใใพใ (1 ๅใใใๆฐ ms)ใ
ใใ ใ connectedRoutes ใฎๆข็ดขใฏใ็ฎ็ๅฐใฎ้ง
ใฐใซใผใใง้ไธญไธ่ปใใฆไนใ็ถใ
็ต่ทฏใไฝใใพใใใใใฎใใๅ็ดใชๅน
ๅชๅ
ๆข็ดขใงใฏใใๆฏ็ทใฎๅๅฒ้ง
ใซใใใฃใใ
ๆฏ็ทใธๅบใฆใใๆปใฃใฆใใฆๅฐ็ใใใ็ต่ทฏใพใงๆฐใใฆใใพใใพใ (็ฎ้ข็ทใง
็ณๆฉ้ชๅคงๅใซ็ใใๅฝ้คจๆฌ็ทใงๆฐๅฝ้คจๅๆใซ็ใใใชใฉใๅฎใใผใฟใงใฏ 0.3ใ0.7%
ใฎ้ง
ใ่ฉฒๅฝใใพใ)ใใใใ่ตทใใใฎใฏใ็ฎ็ๅฐใใ้ง
ใจ็ณป็ตฑใใใชใไบ้จใฐใฉใใ
ใฎ้ข็ฏ็นใงใใๅ ดๅใซ้ใใใพใใใใใง็ถฒใฎๆง็ฏๆใซ้ข็ฏ็นใๆฑใใฆใใ
(Tarjan ใฎใขใซใดใชใบใ )ใ่ฉฒๅฝใใ้ง
ใซใคใใฆใ ใใ็ฎ็ๅฐใง้ไธญไธ่ปใใชใ
ๅน
ๅชๅ
ๆข็ดขใงๆนใใฆ็ขบ่ชใใพใใๅฐๅ
ฅๆใซใฏใๅฎใใผใฟใฎ 3 ใคใฎๅบ็บ้ง
ใซใคใใฆ
ใใใใ 1,500 ้ง
ใ็ชใๅใใใconnectedRoutes ใฎๆข็ดข็ตๆใจ้ฃใ้ใใ
ใชใใใจใ็ขบ่ชใใพใใใ็ถฒใฎๆง็ฏๅพใงใใใฐใstationsByName ใฏ 100 ไปถใใใใใ
ๅ ดๅใงใ 2ใ4ms ใงๅฟ็ญใใพใใ
1 ๅใฎๆข็ดขใฎ่จ็ฎ้ใฏ O(ไน่ปๅๆฐ ร ่ตฐๆปใใใใฟใผใณใฎ้ง
ๆฐ) ใงใใๆงๅฎ่ฃ
(ๅ่ป็จฎๅฅใจ้่ป้ง
ใฎใในใฆใฎ็ตใฟๅใใใใไนๆๅๆฐใฎๅใ ใๅๆใใๆทฑใๅถ้
ใคใใฎ BFS) ใจใฎๆฏ่ผใฏๆฌกใฎใจใใใงใ (ใใคใใฃใใฎ release ใใซใใ
data/*.csv ใไฝฟ็จ)ใ
| ๅบ้ | ๆงๅฎ่ฃ | ๆฐๅฎ่ฃ (ๆข็ดขใฎใฟ) |
|---|---|---|
| ๆฑไบฌ โ ๆธ่ฐท | 370ms | 11ใ13ms |
| ไธ้ทน โ ไธญ็ฎ้ป | 173ms (0 ไปถ) | 13ใ18ms |
| ๅคงๅฎฎ โ ๆฐๅคง้ช | 349ms | 31ใ36ms |
| ไปๅฐ โ ๅๅค | 693ms | 14ใ20ms |
ๆๅป่กจใ้่ปข้้ใ้ง ใฐใซใผใใใพใใๅพๆญฉ้ฃ็ตกใฎใใผใฟใใชใใใใๅพ ใกๆ้ใฏ ็จฎๅฅใใ่ฆ็ฉใใฃใๅคใงใใ ๅญฃ็ฏ้่กใฎ่จๆๅ่ปใใ้ๅธธใฎ็ณป็ตฑใจๅใใใใซๆฑใใพใใ
ใฏใฉใคใขใณใใจใฎไบๆๆงใไฟใคใใใใจใณใใใคใณใใฏใตใใใกใคใณใฎใซใผใใง ใฏใจใชใๅใไปใใพใใ
| ใใน | ๅ ๅฎน |
|---|---|
POST / |
ใฏใจใชใฎๅฎ่ก |
GET / |
GraphiQL |
GET /__schema |
SDL (CI ใๅๅพใใฆ็ชใๅใใใ) |
GET /__health |
็ดขๅผใฎไปถๆฐ |
GET /__ping |
ใใผใฟใซ่งฆใใชใ็้็ขบ่ช |
async-graphql ใฏใณใผใใใกใผในใใชใฎใงใRust ใฎๅใๅคๆดใใใจ SDL ใ
ๅคใใใพใใใฏใฉใคใขใณใใๅฃใๅคๆดใซๆฐไปใใใใใschema/public.graphql ใ
ๆญฃใจใใฆ scripts/compare_schema.py ใง็ชใๅใใใๅทฎๅใใใใฐ CI ใๅคฑๆ
ใใใพใใๅใจใใฃใผใซใใฏ้ๅใจใใฆๆฏ่ผใใenum ใฏ้ ๅบใๅซใใฆๆฏ่ผใใพใใ
ในใญใผใใๆๅณ็ใซๅคๆดใใใจใใฏใใใฎใใกใคใซใๆดๆฐใใพใใใใฎๅทฎๅใใ ใใฎใพใพใฏใฉใคใขใณใใธใฎๅฝฑ้ฟ็ฏๅฒใซใชใใพใใ
ๅฎ่ฃ ไธใฎๆณจๆ:
async-graphqlใฏๆขๅฎใง enum ใฎๅคใ SCREAMING_SNAKE_CASE ใซใใใๅ ฌ้ ในใญใผใใฏ PascalCase ใชใฎใงใrename_itemsใงๅใใใฆใใ- PascalCase ใซๅคๆใใใจ
JRใJrใซใชใใใใใใฎๅคใ ใใฏnameใ ๆ็คบใใฆใใ StationใจStationNestedใฎใใใซใๆง้ ใๅใใงๅๅใ ใใ้ใๅใฏใ SDL ใๅใใใใใใซใใฏใญใงไธกๆนใๅฎ็พฉใใฆใใใNested ๅใฏไบใใซๅ็ ง ใๅใใฎใงใBoxใง้ๆฅๅ็ งใซใใชใใจ็ก้ใตใคใบใฎๅใซใชใ
ๅใใ้ง ใใ่กจใๅใใๅฑคใใจใซ 3 ใคใใใพใใ
| ็จฎๅฅ | ๅ ดๆ | ็ฎ็ | ็นๅพด |
|---|---|---|---|
| Record | src/index.rs |
ๅใ่พผใฟ CSV ใฎ 1 ่ก | ๆค็ดขใซๅฟ ่ฆใชๅใ ใใๆใค่ปฝ้ใชๆง้ ไฝ |
| Entity | stationapi/src/domain/entity/ |
ใใกใคใณใขใใซ | ใในใๆง้ ใๅค่จ่ชๅฏพๅฟใ็ด 65 ใใฃใผใซใ |
| Model | stationapi/src/model.rs |
API ใ่ฟใๅค | ๅๆๅใ i32 ใฎใพใพไฟๆใใ |
// src/index.rs
pub struct StationRecord {
pub station_cd: i32,
pub station_g_cd: i32,
pub name: String,
// ๆค็ดขใซไฝฟใๅใ ใใๆใคใใฌในใใณใน็จใฎ Station ใฏๅฟ
่ฆใซใชใฃใๆ็นใง็ตใฟ็ซใฆใ
}ๅๅใซใใๆค็ดขใฏใชใฏใจในใใฎใใณใซๅ
จไปถ่ตฐๆปใใใฎใงใ็ดขๅผใซใฏ Station
ใจใณใใฃใใฃ (65 ใใฃใผใซใ) ใๆใใใใใฌในใใณในใ็ๆใใใจใใซใ ใ
็ตใฟ็ซใฆใพใใใญใผใๅญๅใฎๅฐๆๅญ็ใฎใใใซใๆฏ่ผใฎใใณใซ่จ็ฎใใใจใณในใใ
ใใใๅคใฏใ็ดขๅผใฎๆง็ฏๆใซ่จ็ฎใใฆๆใฃใฆใใใพใใ
// stationapi/src/domain/entity/station.rs
pub struct Station {
pub station_cd: i32,
pub line: Option<Box<Line>>,
pub lines: Vec<Line>,
pub station_numbers: Vec<StationNumber>,
// ...
}- ใใธใในไธใฎๆๅณใๅๆ ใใๅ (
StopConditionๅๆๅใชใฉ) ใไฝฟใ - ๅค่จ่ชใฎๅ็งฐ:
station_name_r(ใญใผใๅญ)ใstation_name_zhใstation_name_ko
generated/*.csv
โ ่ตทๅๆใซไธๅบฆใ ใใใผใน
Record (StationRecord)
โ to_entity(): ่ทฏ็ทใฎๅฑๆงใๅใใ
Entity (Station)
โ UseCase ๅฑคใงใในใใใใใผใฟใไปไธ
Enriched Entity
โ DTO ๅคๆ: IPA / TTS ใปใฐใกใณใใ็ๆ
Model (model::Station)
โ From ใซใใๅคๆ
GraphQL ๅ[Client]
โ
โผ POST / (GraphQL)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation (src/graphql/query.rs) โ
โ โโ Query::station() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ QueryUseCase ใฎใกใฝใใๅผใณๅบใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UseCase (use_case/interactor/query.rs) โ
โ โโ QueryInteractor::find_station_by_id() โ
โ โโ update_station_vec_with_attributes() โ
โ โโ ๅใ้ง
ใฐใซใผใใฎ้ง
ใไธๆฌๅๅพ โ
โ โโ ่ทฏ็ทใไธๆฌๅๅพ โ
โ โโ ่ฟๅใฎใในๅใไธๆฌๅๅพ โ
โ โโ ไบๆฅญ่
ใไธๆฌๅๅพ โ
โ โโ ๅ่ป็จฎๅฅใไธๆฌๅๅพ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ repository ใใฌใคใ็ต็ฑ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Index (src/repository.rs, src/index.rs) โ
โ โโ MemStationRepository::find_by_id() โ
โ โโ HashMap ๅ็
ง โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ Record โ Entity ๅคๆ
โผ Entity โ Model ๅคๆ (use_case/dto/)
โผ Model โ GraphQL ๅ
[Client]ไธๆฌๅๅพใฏ N+1 ๅ้กใ้ฟใใใใใฎใใฎใงใใใผใฟใใผในใไฝฟใฃใฆใใ้ ใใ ๅคใใฆใใพใใใใคใณใกใขใชใงใใฃใฆใใ้ง ใใจใซ็ดขๅผใๅผใ็ดใใใใไธๅบฆใซ ใพใจใใฆ้ใใใปใใ็ด ็ดใชๅฎ่ฃ ใซใชใใพใใ
DomainError
โ ? ๆผ็ฎๅญ (From ใใฌใคใ)
UseCaseError
โ ? ๆผ็ฎๅญ (Display ใๅฎ่ฃ
ใใๅใๅใๅใ async-graphql ใฎๆฑ็จ From ๅฎ่ฃ
)
async_graphql::Error
โ
GraphQL ใฎ errors ใใฃใผใซใrepository ใฎๅฎ่ฃ
ใใชใใกใฝใใใฏใ็ฉบใฎ็ตๆใงใฏใชใ DomainError ใ่ฟใ
ๆน้ใงใ (็พๅจใฏใStationRepository::get_route_network ใฎๆขๅฎๅฎ่ฃ
ใใใใซ
ใใใใพใ)ใ้ปใฃใฆ็ฉบใฎ็ตๆใ่ฟใใจๆญฃๅธธใชๅฟ็ญใซ่ฆใใฆใใพใใๅฎ่ฃ
ๆผใใซ
ๆฐไปใใชใใใใงใใ็งป่กๆใซใฏใๅฎ้ใซใใฎๆน้ใฎใใใใงๅฎ่ฃ
ๆผใใ 1 ไปถ
ๆคๅบใงใใพใใใ
.
โโโ Cargo.toml # stationapi-worker (wasm32 ๅฐ็จ) + workspace
โโโ wrangler.jsonc # staging / production ใฎ่จญๅฎ
โโโ build.rs # CSV ใ OUT_DIR ใซ้
็ฝฎใใsst.bin ใจ connections.bin ใ็ๆ
โโโ src/ # Worker ๆฌไฝ
โ โโโ lib.rs # ใจใณใใใคใณใ
โ โโโ index.rs # ๅใ่พผใฟใใผใฟใฎใใผในใจ็ดขๅผ
โ โโโ repository.rs # repository ใใฌใคใใฎๅฎ่ฃ
โ โโโ graphql/ # GraphQL ใฎๅใจใชใพใซใ
โ โโโ query.rs # 18 ใฏใจใช
โ โโโ types.rs # ใชใใธใงใฏใๅ
โ โโโ enums.rs # ๅๆๅ
โ โโโ scalar.rs # UInt32 ในใซใฉใผ
โ
โโโ schema/
โ โโโ public.graphql # ๅ
ฌ้ในใญใผใใฎๆญฃๆฌ (CI ใง็ชใๅใใใ)
โ
โโโ stationapi/ # ใใกใคใณใจใฆใผในใฑใผใน (Worker ใจ preprocessor ใงๅ
ฑๆ)
โ โโโ src/
โ โโโ domain/
โ โ โโโ entity/ # Station / Line / TrainType / Company ...
โ โ โโโ repository/ # ๆฝ่ฑกใคใณใฟใผใใงใผใน
โ โ โโโ arrival_estimation.rs
โ โ โโโ legacy_speed_table.rs # ๅ
ใฎ่ผๆญฃ (connectedRoutes ใจ trainRoute ใฎ Legacy ใไฝฟใ)
โ โ โโโ route_search.rs # ไนๆ็ต่ทฏๆข็ดข (RAPTOR)
โ โ โโโ route_topology.rs # ๆ่ฆๆ้ใๆใใชใ็ณป็ตฑ็ถฒ (stationsByName ใฎๅฐ้ๅคๅฎ)
โ โ โโโ segment_speed_table.rs
โ โ โโโ speed_table.rs
โ โ โโโ ipa.rs
โ โ โโโ romaji.rs
โ โ โโโ normalize.rs
โ โโโ use_case/
โ โ โโโ interactor/query.rs # QueryInteractor
โ โ โโโ traits/query.rs # QueryUseCase ใใฌใคใ
โ โ โโโ dto/ # Entity โ Model ๅคๆ
โ โโโ model.rs # API ใ่ฟใๅคใฎๅ
โ
โโโ preprocessor/ # generated/*.csv ใ็ๆใใใใซใๆใใผใซ
โ โโโ src/
โ โโโ rail.rs # data/*.csv ใฎ่ชญใฟ่พผใฟใจๅ้ง
ๅ่ปใฎ็ณป็ตฑ็ๆ
โ โโโ gtfs/ # GTFS / ODPT ใฎๅๅพใป่งฃๆใป็ตฑๅ
โ โโโ track/ # ๅฝๅๆฐๅคๆ
ๅ ฑใใใฎ้ง
้ใฎ็ท่ทฏใฎ้ทใ
โ โโโ codes.rs # ใใน็จใณใผใใฎ็ๆ
โ โโโ table.rs # ๅบๅใใผใใซใฎ่กจ็พ
โ โโโ emit.rs # CSV ใฎๆธใๅบใ
โ
โโโ data_validator/ # data/*.csv ใฎๆดๅๆงใใงใใฏ
โโโ data/ # ้้ใฎๆญฃๆฌใใผใฟ (CSV) ใจ GTFSใปN02 ใฎๅฑ้ๅ
โโโ generated/ # preprocessor ใฎๅบๅ (git ็ฎก็ๅค)
โโโ scripts/ # ใใผใฟๆดๅใจในใญใผใๆฏ่ผใฎในใฏใชใใ
โโโ tools/ # IPA ใซใใฌใใธใฎ็ฃๆปไปใฎ Worker ใซๅใใใฆใenv ใ็็ฅใใใจใใฏ staging ใซใใใญใคใใใใใใซ ใใฆใใพใใ
make deploy # wrangler deploy --env="" -> stationapi-stg
make deploy-production # wrangler deploy --env production -> stationapiwrangler 4 ใฏใ่คๆฐใฎ็ฐๅขใๅฎ็พฉใใใฆใใ็ถๆ
ใง --env ใ็็ฅใใใจ่ญฆๅใ
ๅบใใพใใใใฎใใใstaging ใซใใใญใคใใใจใใ --env="" ใๆ็คบใใฆใใพใใ
- ใใผใฟใๆดๆฐใใใใณใซๅใใใญใคใๅฟ ่ฆใ ใใผใฟใ WASM ใซๅใ่พผใใง ใใใใ
- custom domain ใฏไบ้ใซ็ป้ฒใงใใชใใ ใใกใคใณใๅฅใฎ Worker ใซ็งปใใจใใฏใ ๅ ใซๅ ใฎ Worker ใใๅคใใฆใใใญใคใใฆใใๅฟ ่ฆใใใ
generated/ใฏ git ็ฎก็ๅคใ ใฏใญใผใณใใ็ดๅพใซใฏๅญๅจใใชใใฎใงใmake dataใง็ๆใใใๅญๅจใใชใใพใพworker-buildใๅฎ่กใใใจdata/*.csvใซใใฉใผใซใใใฏใใๅ้ง ๅ่ปใฎ็ณป็ตฑใจใในใๆฌ ใใ็ถๆ ใง ใใซใใใใ (่ญฆๅใฏๅบใ)