Skip to content

GetConnectedRoutesで複数列車種別を跨ぐ経路を返す #1611

Description

@TinyKitten

背景

GetConnectedRoutes(GetConnectedStationsRequest) -> RouteResponse が定義されているが、QueryInteractor::get_connected_stations は常に空配列を返す未実装状態になっている。

現在駅から目的駅まで単一の列車種別では到達できない場合も、複数の列車種別を跨ぐ経路候補を取得できるようにする。

実装する仕様

  • from_station_group_id から to_station_group_id まで、列車種別を1つ以上用いる経路を探索する
  • 単一種別で到達できない場合も探索を終了せず、ある種別の終点と次の種別の始発が同じ駅グループである組み合わせを辿る
  • 2種別に限定せず、複数回の連結を扱えるようにする
  • 列車種別ごとの駅順・方向を維持し、接続駅の重複を除いた1本の駅列として Route.stops を返す
  • 連結した各区間の停車情報(stop_condition など)を失わない
  • 連結経路ごとに、既存の line_group_cd と衝突しない一意な仮想 lineGroupId を生成する
  • 返却する経路内の全駅について station.train_type.group_id を同じ仮想 lineGroupId に統一する
  • 同じ経路からは同じIDが得られる決定的な生成方法にし、異なる候補経路には異なるIDを付ける
  • 到達経路がない場合は、空の routes を返す。空の stops を持つダミー経路は返さない
  • 循環参照を防ぎ、探索範囲・計算量に上限を設ける

実装範囲

  • QueryInteractor::get_connected_stations の実装
  • 経路探索に必要なRepository APIとPostgreSQL実装の追加
  • GetConnectedRoutes のpresentation層を、複数の経路候補と経路ごとの仮想IDを正しく返せる構造へ修正
  • 必要な場合は TrainLCD/gRPCProto のレスポンス型を更新し、StationAPIのsubmodule参照も更新
  • AGENTS.md / README / architecture資料の未実装記述を更新

受け入れ条件

  • 伊勢崎駅グループ → 大前駅グループで、単一種別が0件でも複数種別を連結した経路が1件以上返る
  • 返却駅列が始点から終点の順になり、接続駅が二重に含まれない
  • 連結前の各種別に含まれる停車・通過情報が保持される
  • 同一経路の全駅で train_type.group_id が同じ値になる
  • 仮想 lineGroupId が既存IDおよび別経路のIDと衝突しない
  • 直通する単一種別の経路も従来どおり返る
  • 到達不能、循環する種別グラフ、3種別以上の連結を含むテストがある
  • unit test / integration test / cargo fmt / cargo clippy --all-targets --all-features が成功する

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions