Next alpha stage commit

This commit is contained in:
2026-07-06 20:54:46 +02:00
parent e23387738b
commit 1d7ec956d2
42 changed files with 11603 additions and 2837 deletions

View File

@@ -81,6 +81,115 @@ class Dataset(Base):
source: Mapped[Source] = relationship(back_populates="datasets")
class GtfsHarmonizedSnapshot(Base):
__tablename__ = "gtfs_harmonized_snapshots"
__table_args__ = (UniqueConstraint("snapshot_key", name="uq_gtfs_harmonized_snapshot_key"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
snapshot_key: Mapped[str] = mapped_column(String(128), nullable=False, index=True)
status: Mapped[str] = mapped_column(String(64), nullable=False, default="draft", index=True)
source: Mapped[str] = mapped_column(String(64), nullable=False, default="computed")
note: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
summary_json: Mapped[str] = mapped_column(Text, nullable=False)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
activated_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
datasets: Mapped[list["GtfsHarmonizedSnapshotDataset"]] = relationship(back_populates="snapshot", cascade="all, delete-orphan")
routes: Mapped[list["GtfsHarmonizedSnapshotRoute"]] = relationship(back_populates="snapshot", cascade="all, delete-orphan")
class GtfsHarmonizedSnapshotDataset(Base):
__tablename__ = "gtfs_harmonized_snapshot_datasets"
__table_args__ = (UniqueConstraint("snapshot_id", "dataset_id", name="uq_gtfs_harmonized_snapshot_dataset"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
snapshot_id: Mapped[int] = mapped_column(ForeignKey("gtfs_harmonized_snapshots.id"), nullable=False, index=True)
dataset_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
source_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
source_name: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
role: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
reason: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
shadowed_by_dataset_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
shadowed_by_source_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
authority_level: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
review_authority_level: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
route_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
route_key_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
route_key_overlap: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
route_key_overlap_ratio: Mapped[float] = mapped_column(Float, nullable=False, default=0.0)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
snapshot: Mapped[GtfsHarmonizedSnapshot] = relationship(back_populates="datasets")
class GtfsHarmonizedSnapshotRoute(Base):
__tablename__ = "gtfs_harmonized_snapshot_routes"
__table_args__ = (UniqueConstraint("snapshot_id", "gtfs_route_id", name="uq_gtfs_harmonized_snapshot_route"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
snapshot_id: Mapped[int] = mapped_column(ForeignKey("gtfs_harmonized_snapshots.id"), nullable=False, index=True)
gtfs_route_id: Mapped[int] = mapped_column(ForeignKey("gtfs_routes.id"), nullable=False, index=True)
dataset_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
source_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
route_id: Mapped[str] = mapped_column(Text, nullable=False)
overlap_key: Mapped[Optional[str]] = mapped_column(String(255), nullable=True, index=True)
role: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
reason: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
shadowed_by_gtfs_route_id: Mapped[Optional[int]] = mapped_column(ForeignKey("gtfs_routes.id"), nullable=True, index=True)
shadowed_by_dataset_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
shadowed_by_source_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
snapshot: Mapped[GtfsHarmonizedSnapshot] = relationship(back_populates="routes")
gtfs_route: Mapped["GtfsRoute"] = relationship(foreign_keys=[gtfs_route_id])
shadowed_by_gtfs_route: Mapped[Optional["GtfsRoute"]] = relationship(foreign_keys=[shadowed_by_gtfs_route_id])
class GtfsFeedDiffRun(Base):
__tablename__ = "gtfs_feed_diff_runs"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
source_id: Mapped[int] = mapped_column(ForeignKey("sources.id"), nullable=False, index=True)
previous_dataset_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
new_dataset_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
status: Mapped[str] = mapped_column(String(64), nullable=False, default="completed", index=True)
diff_key: Mapped[str] = mapped_column(String(128), nullable=False, index=True)
summary_json: Mapped[str] = mapped_column(Text, nullable=False)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
source: Mapped[Source] = relationship()
items: Mapped[list["GtfsFeedDiffItem"]] = relationship(back_populates="diff_run", cascade="all, delete-orphan")
class GtfsFeedDiffItem(Base):
__tablename__ = "gtfs_feed_diff_items"
__table_args__ = (UniqueConstraint("diff_run_id", "item_type", "object_key", "change_type", name="uq_gtfs_feed_diff_item"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
diff_run_id: Mapped[int] = mapped_column(ForeignKey("gtfs_feed_diff_runs.id"), nullable=False, index=True)
source_id: Mapped[int] = mapped_column(ForeignKey("sources.id"), nullable=False, index=True)
previous_dataset_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
new_dataset_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
item_type: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
object_key: Mapped[str] = mapped_column(String(255), nullable=False, index=True)
change_type: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
severity: Mapped[str] = mapped_column(String(32), nullable=False, default="info", index=True)
status: Mapped[str] = mapped_column(String(64), nullable=False, default="open", index=True)
title: Mapped[str] = mapped_column(Text, nullable=False)
old_payload_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
new_payload_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
diff_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
resolved_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
diff_run: Mapped[GtfsFeedDiffRun] = relationship(back_populates="items")
source: Mapped[Source] = relationship()
class SourceUpdateCheck(Base):
__tablename__ = "source_update_checks"
@@ -543,6 +652,83 @@ class MatchRule(Base):
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False)
class MapGtfsDecision(Base):
__tablename__ = "map_gtfs_decisions"
__table_args__ = (UniqueConstraint("decision_key", name="uq_map_gtfs_decision_key"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
decision_key: Mapped[str] = mapped_column(String(255), nullable=False, index=True)
decision_type: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
status: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False, index=True)
source_id: Mapped[Optional[int]] = mapped_column(ForeignKey("sources.id"), nullable=True, index=True)
gtfs_dataset_id: Mapped[Optional[int]] = mapped_column(ForeignKey("datasets.id"), nullable=True, index=True)
gtfs_route_id: Mapped[Optional[int]] = mapped_column(ForeignKey("gtfs_routes.id"), nullable=True, index=True)
gtfs_stop_id: Mapped[Optional[int]] = mapped_column(ForeignKey("gtfs_stops.id"), nullable=True, index=True)
osm_dataset_id: Mapped[Optional[int]] = mapped_column(ForeignKey("datasets.id"), nullable=True, index=True)
osm_feature_id: Mapped[Optional[int]] = mapped_column(ForeignKey("osm_features.id"), nullable=True, index=True)
route_match_id: Mapped[Optional[int]] = mapped_column(ForeignKey("route_matches.id"), nullable=True, index=True)
canonical_stop_id: Mapped[Optional[int]] = mapped_column(ForeignKey("canonical_stops.id"), nullable=True, index=True)
canonical_stop_link_id: Mapped[Optional[int]] = mapped_column(ForeignKey("canonical_stop_links.id"), nullable=True, index=True)
confidence: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
evidence_hash: Mapped[Optional[str]] = mapped_column(String(128), nullable=True, index=True)
selector_json: Mapped[str] = mapped_column(Text, nullable=False)
action_json: Mapped[str] = mapped_column(Text, nullable=False)
note: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
reviewer: Mapped[Optional[str]] = mapped_column(String(255), nullable=True)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
source: Mapped[Optional[Source]] = relationship(foreign_keys=[source_id])
gtfs_dataset: Mapped[Optional[Dataset]] = relationship(foreign_keys=[gtfs_dataset_id])
gtfs_route: Mapped[Optional[GtfsRoute]] = relationship()
gtfs_stop: Mapped[Optional[GtfsStop]] = relationship()
osm_dataset: Mapped[Optional[Dataset]] = relationship(foreign_keys=[osm_dataset_id])
osm_feature: Mapped[Optional[OsmFeature]] = relationship()
route_match: Mapped[Optional[RouteMatch]] = relationship()
canonical_stop: Mapped[Optional[CanonicalStop]] = relationship()
canonical_stop_link: Mapped[Optional[CanonicalStopLink]] = relationship()
class MapGtfsReviewItem(Base):
__tablename__ = "map_gtfs_review_items"
__table_args__ = (UniqueConstraint("fingerprint", name="uq_map_gtfs_review_item_fingerprint"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
fingerprint: Mapped[str] = mapped_column(String(255), nullable=False, index=True)
queue: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
item_type: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
status: Mapped[str] = mapped_column(String(64), nullable=False, default="open", index=True)
severity: Mapped[str] = mapped_column(String(32), nullable=False, default="info", index=True)
title: Mapped[str] = mapped_column(Text, nullable=False)
description: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
source_id: Mapped[Optional[int]] = mapped_column(ForeignKey("sources.id"), nullable=True, index=True)
dataset_id: Mapped[Optional[int]] = mapped_column(ForeignKey("datasets.id"), nullable=True, index=True)
gtfs_route_id: Mapped[Optional[int]] = mapped_column(ForeignKey("gtfs_routes.id"), nullable=True, index=True)
gtfs_stop_id: Mapped[Optional[int]] = mapped_column(ForeignKey("gtfs_stops.id"), nullable=True, index=True)
osm_feature_id: Mapped[Optional[int]] = mapped_column(ForeignKey("osm_features.id"), nullable=True, index=True)
route_match_id: Mapped[Optional[int]] = mapped_column(ForeignKey("route_matches.id"), nullable=True, index=True)
canonical_stop_id: Mapped[Optional[int]] = mapped_column(ForeignKey("canonical_stops.id"), nullable=True, index=True)
canonical_stop_link_id: Mapped[Optional[int]] = mapped_column(ForeignKey("canonical_stop_links.id"), nullable=True, index=True)
decision_id: Mapped[Optional[int]] = mapped_column(ForeignKey("map_gtfs_decisions.id"), nullable=True, index=True)
evidence_hash: Mapped[Optional[str]] = mapped_column(String(128), nullable=True, index=True)
metadata_json: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=now_utc, nullable=False, index=True)
resolved_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
source: Mapped[Optional[Source]] = relationship(foreign_keys=[source_id])
dataset: Mapped[Optional[Dataset]] = relationship(foreign_keys=[dataset_id])
gtfs_route: Mapped[Optional[GtfsRoute]] = relationship()
gtfs_stop: Mapped[Optional[GtfsStop]] = relationship()
osm_feature: Mapped[Optional[OsmFeature]] = relationship()
route_match: Mapped[Optional[RouteMatch]] = relationship()
canonical_stop: Mapped[Optional[CanonicalStop]] = relationship()
canonical_stop_link: Mapped[Optional[CanonicalStopLink]] = relationship()
decision: Mapped[Optional[MapGtfsDecision]] = relationship()
class JourneySearchCache(Base):
__tablename__ = "journey_search_cache"