aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2026-03-05 01:54:35 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2026-03-05 01:54:58 +0100
commit6e2d9ffe812eb1ca8fe5d04d3df2aa322e9e5760 (patch)
tree8a524c3145228a93ec44c07591b3aeed12d2317c /src
parent4d9ca9016953a08748628d1d091989027c4cbe99 (diff)
Refactor deployment process to use rsync for frontend and backend, update project paths, and add CtagShuttleRealtimeEstimatesProvider and CtagShuttleStatus classes
Diffstat (limited to 'src')
-rw-r--r--src/Enmarcha.Backend/Enmarcha.Backend.csproj2
-rw-r--r--src/Enmarcha.Backend/Services/Processors/CtagShuttleRealTimeProcessor.cs2
-rw-r--r--src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs1
-rw-r--r--src/Enmarcha.Sources.CtagShuttle/CtagShuttleRealtimeEstimatesProvider.cs30
-rw-r--r--src/Enmarcha.Sources.CtagShuttle/Enmarcha.Sources.CtagShuttle.csproj9
-rw-r--r--src/Enmarcha.Sources.CtagShuttle/Status.cs46
-rw-r--r--src/frontend/app/i18n/locales/en-GB.json2
-rw-r--r--src/frontend/app/i18n/locales/es-ES.json2
-rw-r--r--src/frontend/app/i18n/locales/gl-ES.json2
9 files changed, 90 insertions, 6 deletions
diff --git a/src/Enmarcha.Backend/Enmarcha.Backend.csproj b/src/Enmarcha.Backend/Enmarcha.Backend.csproj
index a353b4d..3ce20ad 100644
--- a/src/Enmarcha.Backend/Enmarcha.Backend.csproj
+++ b/src/Enmarcha.Backend/Enmarcha.Backend.csproj
@@ -29,7 +29,7 @@
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\Enmarcha.Sources.CtagShuttle\Enmarcha.Sources.CtagShuttle.csproj" />
+ <ProjectReference Include="..\Enmarcha.Sources.CtagShuttle\Enmarcha.Sources.CtagShuttle.csproj" />
<ProjectReference Include="..\Enmarcha.Sources.OpenTripPlannerGql\Enmarcha.Sources.OpenTripPlannerGql.csproj" />
<ProjectReference Include="..\Enmarcha.Sources.TranviasCoruna\Enmarcha.Sources.TranviasCoruna.csproj" />
<ProjectReference Include="..\Enmarcha.Sources.Tussa\Enmarcha.Sources.Tussa.csproj" />
diff --git a/src/Enmarcha.Backend/Services/Processors/CtagShuttleRealTimeProcessor.cs b/src/Enmarcha.Backend/Services/Processors/CtagShuttleRealTimeProcessor.cs
index 593ac86..316591d 100644
--- a/src/Enmarcha.Backend/Services/Processors/CtagShuttleRealTimeProcessor.cs
+++ b/src/Enmarcha.Backend/Services/Processors/CtagShuttleRealTimeProcessor.cs
@@ -175,7 +175,7 @@ public class CtagShuttleRealTimeProcessor : AbstractRealTimeProcessor
.Where(a => a.Estimate.Minutes >= 0)
.OrderBy(a => a.Estimate.Minutes)
.FirstOrDefault();
-
+
_logger.LogDebug("No matching arrival found, using next upcoming trip");
}
diff --git a/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs b/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs
index f5c7664..7f98fff 100644
--- a/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs
+++ b/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs
@@ -1,6 +1,5 @@
using System.Text.Json;
using CsvHelper;
-using CsvHelper.Configuration;
using Enmarcha.Backend.Types.Arrivals;
using Microsoft.Extensions.Caching.Memory;
using System.Globalization;
diff --git a/src/Enmarcha.Sources.CtagShuttle/CtagShuttleRealtimeEstimatesProvider.cs b/src/Enmarcha.Sources.CtagShuttle/CtagShuttleRealtimeEstimatesProvider.cs
new file mode 100644
index 0000000..3ec0c6f
--- /dev/null
+++ b/src/Enmarcha.Sources.CtagShuttle/CtagShuttleRealtimeEstimatesProvider.cs
@@ -0,0 +1,30 @@
+using System.Net.Http.Json;
+
+namespace Enmarcha.Sources.CtagShuttle;
+
+public class CtagShuttleRealtimeEstimatesProvider
+{
+ private HttpClient _http;
+
+ public CtagShuttleRealtimeEstimatesProvider(HttpClient http)
+ {
+ _http = http;
+ }
+
+ public async Task<CtagShuttleStatus> GetShuttleStatus()
+ {
+ const string url = "https://shuttle.brain4mobility.com/status";
+
+ var response = await _http.GetAsync(url);
+ var status = await response.Content.ReadFromJsonAsync<CtagShuttleStatus>();
+
+ if (status is null)
+ {
+ throw new InvalidOperationException("Failed to retrieve shuttle status");
+ }
+
+ return status;
+ }
+
+}
+
diff --git a/src/Enmarcha.Sources.CtagShuttle/Enmarcha.Sources.CtagShuttle.csproj b/src/Enmarcha.Sources.CtagShuttle/Enmarcha.Sources.CtagShuttle.csproj
new file mode 100644
index 0000000..237d661
--- /dev/null
+++ b/src/Enmarcha.Sources.CtagShuttle/Enmarcha.Sources.CtagShuttle.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net10.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+</Project>
diff --git a/src/Enmarcha.Sources.CtagShuttle/Status.cs b/src/Enmarcha.Sources.CtagShuttle/Status.cs
new file mode 100644
index 0000000..ecf2da1
--- /dev/null
+++ b/src/Enmarcha.Sources.CtagShuttle/Status.cs
@@ -0,0 +1,46 @@
+using System.Text.Json.Serialization;
+
+namespace Enmarcha.Sources.CtagShuttle;
+
+public class CtagShuttleStatus
+{
+ [JsonPropertyName("status")] public required string StatusValue { get; set; }
+ [JsonPropertyName("lat")] public double Latitude { get; set; }
+ [JsonPropertyName("lng")] public double Longitude { get; set; }
+ [JsonPropertyName("last_position_at")] public required string LastPositionAtValue { get; set; }
+ [JsonPropertyName("free_seats")] public int FreeSeats { get; set; }
+
+ [JsonPropertyName("last_occupancy_at")]
+ public required string LastOccupancyAtValue { get; set; }
+
+ [JsonIgnore]
+ public Status Status => Status.Parse(StatusValue);
+
+ [JsonIgnore]
+ public DateTime LastPositionAt => DateTime.Parse(LastPositionAtValue);
+
+ [JsonIgnore]
+ public DateTime LastOccupancyAt => DateTime.Parse(LastOccupancyAtValue);
+}
+
+public enum Status
+{
+ Idle,
+ Operating
+}
+
+public static class StatusExtensions
+{
+ extension(Status)
+ {
+ public static Status Parse(string value)
+ {
+ return value switch
+ {
+ "idle" => Status.Idle,
+ "operating" => Status.Operating,
+ _ => throw new ArgumentException($"Invalid status value: {value}")
+ };
+ }
+ }
+}
diff --git a/src/frontend/app/i18n/locales/en-GB.json b/src/frontend/app/i18n/locales/en-GB.json
index 3d8b32f..aed0066 100644
--- a/src/frontend/app/i18n/locales/en-GB.json
+++ b/src/frontend/app/i18n/locales/en-GB.json
@@ -12,7 +12,7 @@
"data_traffic_source": "Municipal open data",
"data_lines": "Line listings and schedules",
"map_tiles": "Maps",
- "map_themes": "(\"liberty\" and \"positron\" themes for light/dark mode)",
+ "map_themes": "(\"libery\" theme, modified by myself)",
"thanks_council": "Special thanks to Vigo City Council for providing this data under an open license.",
"credits": "Credits",
"developed_by": "Developed by",
diff --git a/src/frontend/app/i18n/locales/es-ES.json b/src/frontend/app/i18n/locales/es-ES.json
index 2184cfc..1c805b3 100644
--- a/src/frontend/app/i18n/locales/es-ES.json
+++ b/src/frontend/app/i18n/locales/es-ES.json
@@ -12,7 +12,7 @@
"data_traffic_source": "Datos abiertos municipales",
"data_lines": "Listado de líneas y horarios",
"map_tiles": "Mapas",
- "map_themes": "(temas \"liberty\" y \"positron\" para modo claro/oscuro)",
+ "map_themes": "(tema \"liberty\", modificado por mí)",
"thanks_council": "Agradecemos especialmente al Concello de Vigo por facilitar estos datos bajo licencia abierta.",
"credits": "Créditos",
"developed_by": "Desarrollado por",
diff --git a/src/frontend/app/i18n/locales/gl-ES.json b/src/frontend/app/i18n/locales/gl-ES.json
index b951278..1af3b56 100644
--- a/src/frontend/app/i18n/locales/gl-ES.json
+++ b/src/frontend/app/i18n/locales/gl-ES.json
@@ -16,7 +16,7 @@
"data_traffic_source": "Datos abertos municipais",
"data_lines": "Listaxe de liñas e horarios",
"map_tiles": "Mapas",
- "map_themes": "(temas \"liberty\" e \"positron\" para modo claro/escuro)",
+ "map_themes": "(tema \"liberty\", modificado por min)",
"thanks_council": "Agradecemos especialmente ao Concello de Vigo por facilitar estes datos baixo licenza aberta.",
"credits": "Créditos",
"developed_by": "Desenvolvido por",