aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-28 22:24:26 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-28 22:25:01 +0100
commit48ec0aae80a200d7eb50639ff4c4ca8ae564f29b (patch)
tree8cf2a2a02a49d8295985d90679c33c5bc8375818 /src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs
parentb2ddc0ef449ccbe7f0d33e539ccdfc1baef04e2c (diff)
Implement displaying routes with dynamic data from OTP
Diffstat (limited to 'src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs')
-rw-r--r--src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs b/src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs
new file mode 100644
index 0000000..8683bfd
--- /dev/null
+++ b/src/Costasdev.Busurbano.Sources.OpenTripPlannerGql/Queries/RouteDetailsContent.cs
@@ -0,0 +1,103 @@
+using System.Globalization;
+using System.Text.Json.Serialization;
+
+namespace Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries;
+
+public class RouteDetailsContent : IGraphRequest<RouteDetailsContent.Args>
+{
+ public record Args(string Id, string ServiceDate);
+
+ public static string Query(Args args)
+ {
+ return string.Create(CultureInfo.InvariantCulture, $$"""
+ query Query {
+ route(id: "{{args.Id}}") {
+ gtfsId
+ shortName
+ longName
+ color
+ textColor
+
+ patterns {
+ id
+ name
+ headsign
+ directionId
+ code
+ semanticHash
+
+ patternGeometry {
+ points
+ }
+
+ stops {
+ gtfsId
+ code
+ name
+ lat
+ lon
+ }
+
+ tripsForDate(serviceDate: "{{args.ServiceDate}}") {
+ stoptimes {
+ scheduledDeparture
+ }
+ }
+ }
+ }
+ }
+ """);
+ }
+}
+
+public class RouteDetailsResponse : AbstractGraphResponse
+{
+ [JsonPropertyName("route")] public RouteItem? Route { get; set; }
+
+ public class RouteItem
+ {
+ [JsonPropertyName("gtfsId")] public string? GtfsId { get; set; }
+ [JsonPropertyName("shortName")] public string? ShortName { get; set; }
+ [JsonPropertyName("longName")] public string? LongName { get; set; }
+ [JsonPropertyName("color")] public string? Color { get; set; }
+ [JsonPropertyName("textColor")] public string? TextColor { get; set; }
+ [JsonPropertyName("patterns")] public List<PatternItem> Patterns { get; set; } = [];
+ }
+
+ public class PatternItem
+ {
+ [JsonPropertyName("id")] public required string Id { get; set; }
+ [JsonPropertyName("name")] public string? Name { get; set; }
+ [JsonPropertyName("headsign")] public string? Headsign { get; set; }
+ [JsonPropertyName("directionId")] public int DirectionId { get; set; }
+ [JsonPropertyName("code")] public string? Code { get; set; }
+ [JsonPropertyName("semanticHash")] public string? SemanticHash { get; set; }
+ [JsonPropertyName("patternGeometry")] public GeometryItem? PatternGeometry { get; set; }
+ [JsonPropertyName("stops")] public List<StopItem> Stops { get; set; } = [];
+ [JsonPropertyName("tripsForDate")] public List<TripItem> TripsForDate { get; set; } = [];
+ }
+
+ public class GeometryItem
+ {
+ [JsonPropertyName("points")] public string? Points { get; set; }
+ }
+
+ public class StopItem
+ {
+ [JsonPropertyName("gtfsId")] public required string GtfsId { get; set; }
+ [JsonPropertyName("code")] public string? Code { get; set; }
+ [JsonPropertyName("name")] public required string Name { get; set; }
+ [JsonPropertyName("lat")] public double Lat { get; set; }
+ [JsonPropertyName("lon")] public double Lon { get; set; }
+ }
+
+ public class TripItem
+ {
+ [JsonPropertyName("stoptimes")] public List<StoptimeItem> Stoptimes { get; set; } = [];
+ }
+
+ public class StoptimeItem
+ {
+ [JsonPropertyName("scheduledDeparture")] public int ScheduledDeparture { get; set; }
+ }
+}