diff options
Diffstat (limited to 'src/Costasdev.Busurbano.Backend')
10 files changed, 19 insertions, 328 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs index b4d8c96..957668a 100644 --- a/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs +++ b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs @@ -1,11 +1,11 @@ using System.Net; using Costasdev.Busurbano.Backend.Configuration; -using Costasdev.Busurbano.Backend.GraphClient; -using Costasdev.Busurbano.Backend.GraphClient.App; using Costasdev.Busurbano.Backend.Helpers; using Costasdev.Busurbano.Backend.Services; using Costasdev.Busurbano.Backend.Types; using Costasdev.Busurbano.Backend.Types.Arrivals; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Options; diff --git a/src/Costasdev.Busurbano.Backend/Controllers/TileController.cs b/src/Costasdev.Busurbano.Backend/Controllers/TileController.cs index e7efc09..0e550a3 100644 --- a/src/Costasdev.Busurbano.Backend/Controllers/TileController.cs +++ b/src/Costasdev.Busurbano.Backend/Controllers/TileController.cs @@ -1,6 +1,3 @@ -using Costasdev.Busurbano.Backend.GraphClient; -using Costasdev.Busurbano.Backend.GraphClient.App; - using NetTopologySuite.Features; using NetTopologySuite.IO.VectorTiles; using NetTopologySuite.IO.VectorTiles.Mapbox; @@ -12,6 +9,8 @@ using System.Text.Json; using Costasdev.Busurbano.Backend.Helpers; using Costasdev.Busurbano.Backend.Services; using Costasdev.Busurbano.Backend.Configuration; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; using Microsoft.Extensions.Options; namespace Costasdev.Busurbano.Backend.Controllers; diff --git a/src/Costasdev.Busurbano.Backend/Costasdev.Busurbano.Backend.csproj b/src/Costasdev.Busurbano.Backend/Costasdev.Busurbano.Backend.csproj index 5e2283c..1f81e88 100644 --- a/src/Costasdev.Busurbano.Backend/Costasdev.Busurbano.Backend.csproj +++ b/src/Costasdev.Busurbano.Backend/Costasdev.Busurbano.Backend.csproj @@ -12,16 +12,21 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="Costasdev.VigoTransitApi" Version="0.1.0" /> - <PackageReference Include="Google.Protobuf" Version="3.33.1" /> - <PackageReference Include="ProjNet" Version="2.1.0" /> + <PackageReference Include="Costasdev.VigoTransitApi" /> + <PackageReference Include="Google.Protobuf" /> + <PackageReference Include="ProjNet" /> - <PackageReference Include="NetTopologySuite" Version="2.6.0" /> - <PackageReference Include="NetTopologySuite.IO.GeoJSON" Version="4.0.0" /> - <PackageReference Include="NetTopologySuite.IO.VectorTiles.Mapbox" Version="1.1.0" /> + <PackageReference Include="NetTopologySuite" /> + <PackageReference Include="NetTopologySuite.IO.GeoJSON" /> + <PackageReference Include="NetTopologySuite.IO.VectorTiles.Mapbox" /> </ItemGroup> <ItemGroup> + <ProjectReference Include="..\Costasdev.Busurbano.Sources.OpenTripPlannerGql\Costasdev.Busurbano.Sources.OpenTripPlannerGql.csproj" /> <ProjectReference Include="..\Costasdev.Busurbano.Sources.TranviasCoruna\Costasdev.Busurbano.Sources.TranviasCoruna.csproj" /> </ItemGroup> + + <ItemGroup> + <Folder Include="GraphClient\" /> + </ItemGroup> </Project> diff --git a/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs b/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs deleted file mode 100644 index 10235de..0000000 --- a/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System.Globalization; -using System.Text.Json.Serialization; - -namespace Costasdev.Busurbano.Backend.GraphClient.App; - -public class ArrivalsAtStopContent : IGraphRequest<ArrivalsAtStopContent.Args> -{ - public record Args(string Id, bool Reduced); - - public static string Query(Args args) - { - var startTime = DateTimeOffset.UtcNow.AddMinutes(-75); - var startTimeUnix = startTime.ToUnixTimeSeconds(); - var geometryField = args.Reduced ? "" : @"tripGeometry { points }"; - - return string.Create(CultureInfo.InvariantCulture, $@" - query Query {{ - stop(id:""{args.Id}"") {{ - code - name - lat - lon - routes {{ - gtfsId - shortName - color - textColor - }} - arrivals: stoptimesWithoutPatterns(numberOfDepartures: 100, startTime: {startTimeUnix}, timeRange: 14400) {{ - headsign - scheduledDeparture - serviceDay - pickupType - - trip {{ - gtfsId - serviceId - routeShortName - route {{ - gtfsId - color - textColor - longName - }} - departureStoptime {{ - scheduledDeparture - }} - {geometryField} - stoptimes {{ - stop {{ - name - lat - lon - }} - scheduledDeparture - }} - }} - }} - }} - }} - "); - } -} - -public class ArrivalsAtStopResponse : AbstractGraphResponse -{ - [JsonPropertyName("stop")] public required StopItem Stop { get; set; } - - public class StopItem - { - [JsonPropertyName("code")] public required 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; } - - [JsonPropertyName("routes")] public List<RouteDetails> Routes { get; set; } = []; - - [JsonPropertyName("arrivals")] public List<Arrival> Arrivals { get; set; } = []; - } - - public class Arrival - { - [JsonPropertyName("headsign")] public required string Headsign { get; set; } - - [JsonPropertyName("scheduledDeparture")] - public int ScheduledDepartureSeconds { get; set; } - - [JsonPropertyName("serviceDay")] - public long ServiceDay { get; set; } - - [JsonPropertyName("pickupType")] public required string PickupTypeOriginal { get; set; } - - public PickupType PickupTypeParsed => PickupType.Parse(PickupTypeOriginal); - - [JsonPropertyName("trip")] public required TripDetails Trip { get; set; } - } - - public class TripDetails - { - [JsonPropertyName("gtfsId")] public required string GtfsId { get; set; } - - [JsonPropertyName("serviceId")] public required string ServiceId { get; set; } - - [JsonPropertyName("routeShortName")] public required string RouteShortName { get; set; } - - [JsonPropertyName("departureStoptime")] - public required DepartureStoptime DepartureStoptime { get; set; } - - [JsonPropertyName("route")] public required RouteDetails Route { get; set; } - - [JsonPropertyName("tripGeometry")] public GeometryDetails? Geometry { get; set; } - - [JsonPropertyName("stoptimes")] public List<StoptimeDetails> Stoptimes { get; set; } = []; - } - - public class GeometryDetails - { - [JsonPropertyName("points")] public string? Points { get; set; } - } - - public class StoptimeDetails - { - [JsonPropertyName("stop")] public required StopDetails Stop { get; set; } - [JsonPropertyName("scheduledDeparture")] public int ScheduledDeparture { get; set; } - } - - public class StopDetails - { - [JsonPropertyName("name")] public required string Name { get; set; } - [JsonPropertyName("lat")] public double Lat { get; set; } - [JsonPropertyName("lon")] public double Lon { get; set; } - } - - public class DepartureStoptime - { - [JsonPropertyName("scheduledDeparture")] - public int ScheduledDeparture { get; set; } - } - - public class RouteDetails - { - [JsonPropertyName("gtfsId")] public required string GtfsId { get; set; } - public string GtfsIdValue => GtfsId.Split(':', 2)[1]; - - [JsonPropertyName("shortName")] public string? ShortName { get; set; } - - [JsonPropertyName("color")] public string? Color { get; set; } - - [JsonPropertyName("textColor")] public string? TextColor { get; set; } - - [JsonPropertyName("longName")] public string? LongName { get; set; } - } - - public class PickupType - { - private readonly string _value; - - private PickupType(string value) - { - _value = value; - } - - public static PickupType Parse(string value) - { - return value switch - { - "SCHEDULED" => Scheduled, - "NONE" => None, - "CALL_AGENCY" => CallAgency, - "COORDINATE_WITH_DRIVER" => CoordinateWithDriver, - _ => throw new ArgumentException("Unsupported pickup type ", value) - }; - } - - public static readonly PickupType Scheduled = new PickupType("SCHEDULED"); - public static readonly PickupType None = new PickupType("NONE"); - public static readonly PickupType CallAgency = new PickupType("CALL_AGENCY"); - public static readonly PickupType CoordinateWithDriver = new PickupType("COORDINATE_WITH_DRIVER"); - - public override bool Equals(object? other) - { - if (other is not PickupType otherPt) - { - return false; - } - - return otherPt._value == _value; - } - - public override int GetHashCode() - { - return _value.GetHashCode(); - } - } -} diff --git a/src/Costasdev.Busurbano.Backend/GraphClient/App/StopTile.cs b/src/Costasdev.Busurbano.Backend/GraphClient/App/StopTile.cs deleted file mode 100644 index 802de9a..0000000 --- a/src/Costasdev.Busurbano.Backend/GraphClient/App/StopTile.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Globalization; -using System.Text.Json.Serialization; - -namespace Costasdev.Busurbano.Backend.GraphClient.App; - -public class StopTileRequestContent : IGraphRequest<StopTileRequestContent.Bbox> -{ - public record Bbox(double MinLon, double MinLat, double MaxLon, double MaxLat); - - public static string Query(Bbox bbox) - { - return string.Create(CultureInfo.InvariantCulture, $@" - query Query {{ - stopsByBbox( - minLat: {bbox.MinLat:F6} - minLon: {bbox.MinLon:F6} - maxLon: {bbox.MaxLon:F6} - maxLat: {bbox.MaxLat:F6} - ) {{ - gtfsId - code - name - lat - lon - routes {{ - gtfsId - shortName - color - textColor - }} - }} - }} - "); - } -} - -public class StopTileResponse : AbstractGraphResponse -{ - [JsonPropertyName("stopsByBbox")] - public List<Stop>? StopsByBbox { get; set; } - - public record Stop - { - [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 required double Lat { get; set; } - - [JsonPropertyName("lon")] - public required double Lon { get; set; } - - [JsonPropertyName("routes")] - public List<Route>? Routes { get; set; } - } - - public record Route - { - [JsonPropertyName("gtfsId")] - public required string GtfsId { get; set; } - [JsonPropertyName("shortName")] - public required string ShortName { get; set; } - - [JsonPropertyName("color")] - public string? Color { get; set; } - - [JsonPropertyName("textColor")] - public string? TextColor { get; set; } - } -} diff --git a/src/Costasdev.Busurbano.Backend/GraphClient/ResponseTypes.cs b/src/Costasdev.Busurbano.Backend/GraphClient/ResponseTypes.cs deleted file mode 100644 index 2d4d5df..0000000 --- a/src/Costasdev.Busurbano.Backend/GraphClient/ResponseTypes.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Costasdev.Busurbano.Backend.GraphClient; - -public class GraphClientRequest -{ - public string OperationName { get; set; } = "Query"; - public required string Query { get; set; } -} - -public class GraphClientResponse<T> where T : AbstractGraphResponse -{ - [JsonPropertyName("data")] - public T? Data { get; set; } - - [JsonPropertyName("errors")] - public List<GraphClientError>? Errors { get; set; } - - public bool IsSuccess => Errors == null || Errors.Count == 0; -} - -public interface IGraphRequest<T> -{ - static abstract string Query(T parameters); -} - -public class AbstractGraphResponse -{ -} - -public class GraphClientError -{ - [JsonPropertyName("message")] - public required string Message { get; set; } -} - diff --git a/src/Costasdev.Busurbano.Backend/Services/Processors/CorunaRealTimeProcessor.cs b/src/Costasdev.Busurbano.Backend/Services/Processors/CorunaRealTimeProcessor.cs index 2ac1554..ee98a1f 100644 --- a/src/Costasdev.Busurbano.Backend/Services/Processors/CorunaRealTimeProcessor.cs +++ b/src/Costasdev.Busurbano.Backend/Services/Processors/CorunaRealTimeProcessor.cs @@ -1,10 +1,7 @@ -using Costasdev.Busurbano.Backend.Configuration; -using Costasdev.Busurbano.Backend.GraphClient.App; using Costasdev.Busurbano.Backend.Types; using Costasdev.Busurbano.Backend.Types.Arrivals; -using Costasdev.VigoTransitApi; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; using Costasdev.Busurbano.Sources.TranviasCoruna; -using Microsoft.Extensions.Options; using Arrival = Costasdev.Busurbano.Backend.Types.Arrivals.Arrival; namespace Costasdev.Busurbano.Backend.Services.Processors; diff --git a/src/Costasdev.Busurbano.Backend/Services/Processors/NextStopsProcessor.cs b/src/Costasdev.Busurbano.Backend/Services/Processors/NextStopsProcessor.cs index 6273e0d..a00a68a 100644 --- a/src/Costasdev.Busurbano.Backend/Services/Processors/NextStopsProcessor.cs +++ b/src/Costasdev.Busurbano.Backend/Services/Processors/NextStopsProcessor.cs @@ -1,4 +1,4 @@ -using Costasdev.Busurbano.Backend.GraphClient.App; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; namespace Costasdev.Busurbano.Backend.Services.Processors; diff --git a/src/Costasdev.Busurbano.Backend/Services/Processors/ShapeProcessor.cs b/src/Costasdev.Busurbano.Backend/Services/Processors/ShapeProcessor.cs index 93e4a4f..40bc508 100644 --- a/src/Costasdev.Busurbano.Backend/Services/Processors/ShapeProcessor.cs +++ b/src/Costasdev.Busurbano.Backend/Services/Processors/ShapeProcessor.cs @@ -1,4 +1,4 @@ -using Costasdev.Busurbano.Backend.GraphClient.App; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; namespace Costasdev.Busurbano.Backend.Services.Processors; diff --git a/src/Costasdev.Busurbano.Backend/Services/Processors/VitrasaRealTimeProcessor.cs b/src/Costasdev.Busurbano.Backend/Services/Processors/VitrasaRealTimeProcessor.cs index 7a1d6ea..5e0783d 100644 --- a/src/Costasdev.Busurbano.Backend/Services/Processors/VitrasaRealTimeProcessor.cs +++ b/src/Costasdev.Busurbano.Backend/Services/Processors/VitrasaRealTimeProcessor.cs @@ -1,7 +1,7 @@ using Costasdev.Busurbano.Backend.Configuration; -using Costasdev.Busurbano.Backend.GraphClient.App; using Costasdev.Busurbano.Backend.Types; using Costasdev.Busurbano.Backend.Types.Arrivals; +using Costasdev.Busurbano.Sources.OpenTripPlannerGql.Queries; using Costasdev.VigoTransitApi; using Microsoft.Extensions.Options; |
