From a304c24b32c0327436bbd8c2853e60668e161b42 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Mon, 29 Dec 2025 00:41:52 +0100 Subject: Rename a lot of stuff, add Santiago real time --- .../Data/AppDbContext.cs | 59 --- .../Data/Extensions/TimeExtensions.cs | 20 - .../Data/Gtfs/Enums/DirectionId.cs | 7 - .../Data/Gtfs/Enums/ExceptionType.cs | 7 - .../Data/Gtfs/Enums/RouteType.cs | 15 - .../Data/Gtfs/Enums/TripBikesAllowed.cs | 8 - .../Data/Gtfs/Enums/TripWheelchairAccessible.cs | 8 - .../Data/Gtfs/Enums/WheelchairBoarding.cs | 8 - .../Data/Gtfs/Feed.cs | 21 - .../Data/Gtfs/GtfsAgency.cs | 46 -- .../Data/Gtfs/GtfsCalendar.cs | 45 -- .../Data/Gtfs/GtfsCalendarDate.cs | 24 - .../Data/Gtfs/GtfsRoute.cs | 70 --- .../Data/Gtfs/GtfsStop.cs | 51 -- .../Data/Gtfs/GtfsStopTime.cs | 44 -- .../Data/Gtfs/GtfsTrip.cs | 57 --- .../Migrations/20251211153852_Initial.Designer.cs | 547 --------------------- .../Data/Migrations/20251211153852_Initial.cs | 318 ------------ .../Data/Migrations/AppDbContextModelSnapshot.cs | 544 -------------------- .../QueryExtensions/GtfsCalendarQueryExtensions.cs | 21 - 20 files changed, 1920 deletions(-) delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/AppDbContext.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Extensions/TimeExtensions.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/DirectionId.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/ExceptionType.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/RouteType.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripBikesAllowed.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripWheelchairAccessible.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/WheelchairBoarding.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Feed.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsAgency.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendar.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendarDate.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsRoute.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStop.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStopTime.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsTrip.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.Designer.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/AppDbContextModelSnapshot.cs delete mode 100644 src/Costasdev.Busurbano.ServiceViewer/Data/QueryExtensions/GtfsCalendarQueryExtensions.cs (limited to 'src/Costasdev.Busurbano.ServiceViewer/Data') diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/AppDbContext.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/AppDbContext.cs deleted file mode 100644 index 50f0791..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/AppDbContext.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Costasdev.ServiceViewer.Data.Gtfs; -using Costasdev.ServiceViewer.Data.Gtfs.Enums; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data; - -public class AppDbContext : DbContext -{ - public AppDbContext(DbContextOptions options) : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - // Route -> Agency - modelBuilder.Entity() - .HasOne(r => r.Agency) - .WithMany() - .HasForeignKey(r => new { r.AgencyId, r.FeedId }) - .HasPrincipalKey(a => new { a.Id, a.FeedId }); - - // Trip -> Route - modelBuilder.Entity() - .HasOne(t => t.Route) - .WithMany() - .HasForeignKey(t => new { t.RouteId, t.FeedId }) - .HasPrincipalKey(a => new { a.Id, a.FeedId }); - - // Relación StopTimes -> Trip - modelBuilder.Entity() - .HasOne(st => st.GtfsTrip) - .WithMany() - .HasForeignKey(st => new { st.TripId, st.FeedId }) - .HasPrincipalKey(a => new { a.Id, a.FeedId }); - - // Relación StopTimes -> Stop - modelBuilder.Entity() - .HasOne(st => st.GtfsStop) - .WithMany() - .HasForeignKey(st => new { st.StopId, st.FeedId }) - .HasPrincipalKey(a => new { a.Id, a.FeedId }); - - modelBuilder.Entity() - .Property(t => t.TripWheelchairAccessible) - .HasDefaultValue(TripWheelchairAccessible.Empty); - - modelBuilder.Entity() - .Property(t => t.TripBikesAllowed) - .HasDefaultValue(TripBikesAllowed.Empty); - } - - public DbSet Agencies { get; set; } - public DbSet Calendars { get; set; } - public DbSet CalendarDates { get; set; } - public DbSet Routes { get; set; } - public DbSet Stops { get; set; } - public DbSet StopTimes { get; set; } - public DbSet Trips { get; set; } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Extensions/TimeExtensions.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Extensions/TimeExtensions.cs deleted file mode 100644 index 7fa487d..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Extensions/TimeExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Extensions; - -public static class TimeExtensions -{ - extension(TimeSpan) { - public static TimeSpan FromGtfsTime(string gtfsTime) - { - var parts = gtfsTime.Split(":", 3); - - var hours = int.Parse(parts[0]); - var minutes = int.Parse(parts[1]); - var seconds = int.Parse(parts[2]); - - int days = hours / 24; - int leftoverHours = hours % 24; - - return new TimeSpan(days, leftoverHours, minutes, seconds); - } - } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/DirectionId.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/DirectionId.cs deleted file mode 100644 index cbcf80b..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/DirectionId.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum DirectionId -{ - Outbound = 0, - Inbound = 1 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/ExceptionType.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/ExceptionType.cs deleted file mode 100644 index 0ad0345..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/ExceptionType.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum ExceptionType -{ - Added = 1, - Removed = 2 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/RouteType.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/RouteType.cs deleted file mode 100644 index e19d02a..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/RouteType.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum RouteType -{ - Tram = 0, - Subway = 1, - Rail = 2, - Bus = 3, - Ferry = 4, - CableTram = 5, - AerialLift = 6, - Funicular = 7, - Trolleybus = 11, - Monorail = 12 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripBikesAllowed.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripBikesAllowed.cs deleted file mode 100644 index 838bc81..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripBikesAllowed.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum TripBikesAllowed -{ - Empty = 0, - CanAccommodate = 1, - NotAllowed = 2 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripWheelchairAccessible.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripWheelchairAccessible.cs deleted file mode 100644 index e84b699..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/TripWheelchairAccessible.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum TripWheelchairAccessible -{ - Empty = 0, - CanAccommodate = 1, - NotAccessible = 2 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/WheelchairBoarding.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/WheelchairBoarding.cs deleted file mode 100644 index 3cc550f..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Enums/WheelchairBoarding.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Costasdev.ServiceViewer.Data.Gtfs.Enums; - -public enum WheelchairBoarding -{ - Unknown = 0, - SomeVehicles = 1, - NotPossible = 2 -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Feed.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Feed.cs deleted file mode 100644 index 065250b..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/Feed.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("feeds")] -public class Feed -{ - /// - /// Auto-incrementing ID value for each feed, to identify it and its version - /// - [Key] - public int Id { get; set; } - - [MaxLength(32)] public string ShortName { get; set; } - [MaxLength(32)] public string LongName { get; set; } - [MaxLength(255)] public string DownloadUrl { get; set; } - [MaxLength(32)] public string Etag { get; set; } - - public DateTime InsertedAt { get; set; } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsAgency.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsAgency.cs deleted file mode 100644 index 89b5518..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsAgency.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_agencies")] -[PrimaryKey(nameof(Id), nameof(FeedId))] -public class GtfsAgency -{ - [Key] - [Column("agency_id")] - [MaxLength(255)] - public required string Id { get; set; } - - [Column("feed_id")] public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("agency_name")] - [MaxLength(255)] - public string Name { get; set; } = string.Empty; - - [Column("agency_url")] - [MaxLength(255)] - public string Url { get; set; } = string.Empty; - - [Column("agency_timezone")] - [MaxLength(50)] - public string Timezone { get; set; } = string.Empty; - - [Column("agency_lang")] - [MaxLength(5)] - public string Language { get; set; } = string.Empty; - - [Column("agency_phone")] - [MaxLength(30)] - public string? Phone { get; set; } = string.Empty; - - [Column("agency_email")] - [MaxLength(255)] - public string? Email { get; set; } = string.Empty; - - [Column("agency_fare_url")] - [MaxLength(255)] - public string? FareUrl { get; set; } = string.Empty; -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendar.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendar.cs deleted file mode 100644 index cfb144c..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendar.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_calendar")] -[PrimaryKey(nameof(ServiceId), nameof(FeedId))] -public class GtfsCalendar -{ - [Key] - [Column("service_id")] - [MaxLength(32)] - public string ServiceId { get; set; } = null!; - - [Column("feed_id")] public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("monday")] - public bool Monday { get; set; } - - [Column("tuesday")] - public bool Tuesday { get; set; } - - [Column("wednesday")] - public bool Wednesday { get; set; } - - [Column("thursday")] - public bool Thursday { get; set; } - - [Column("friday")] - public bool Friday { get; set; } - - [Column("saturday")] - public bool Saturday { get; set; } - - [Column("sunday")] - public bool Sunday { get; set; } - - [Column("start_date")] - public DateOnly StartDate { get; set; } - - [Column("end_date")] - public DateOnly EndDate { get; set; } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendarDate.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendarDate.cs deleted file mode 100644 index 1543ef5..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsCalendarDate.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Costasdev.ServiceViewer.Data.Gtfs.Enums; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_calendar_dates")] -[PrimaryKey(nameof(ServiceId), nameof(Date), nameof(FeedId))] -public class GtfsCalendarDate -{ - [Column("service_id")] - [MaxLength(32)] - public required string ServiceId { get; set; } - - [Column("date")] - public required DateTime Date { get; set; } - - [Column("feed_id")] public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("exception_type")] - public required ExceptionType ExceptionType { get; set; } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsRoute.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsRoute.cs deleted file mode 100644 index c34353c..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsRoute.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Costasdev.ServiceViewer.Data.Gtfs.Enums; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_routes")] -[PrimaryKey(nameof(Id), nameof(FeedId))] -public class GtfsRoute -{ - [Column("route_id")] - [MaxLength(255)] - public required string Id { get; set; } - - public string SafeId => Id.Replace(" ", "_").Replace("-", "_"); - - [Column("feed_id")]public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("agency_id")] - [ForeignKey(nameof(Agency))] - [MaxLength(255)] - public required string AgencyId { get; set; } - - [ForeignKey(nameof(AgencyId))] - public GtfsAgency Agency { get; set; } = null!; - - /// - /// Short name of a route. Often a short, abstract identifier (e.g., "32", "100X", "Green") - /// that riders use to identify a route. Both route_short_name and route_long_name may be defined. - /// - [Column("route_short_name")] - [MaxLength(32)] - public string ShortName { get; set; } = string.Empty; - - /// - /// Full name of a route. This name is generally more descriptive than the route_short_name and often - /// includes the route's destination or stop. Both route_short_name and route_long_name may be defined. - /// - [Column("route_long_name")] - [MaxLength(255)] - public string LongName { get; set; } = string.Empty; - - [Column("route_desc")] - [MaxLength(255)] - public string? Description { get; set; } = string.Empty; - - [Column("route_type")] - public RouteType Type { get; set; } = RouteType.Bus; - - [Column("route_url")] - [MaxLength(255)] - public string? Url { get; set; } = string.Empty; - - [Column("route_color")] - [MaxLength(7)] - public string? Color { get; set; } = string.Empty; - - [Column("route_text_color")] - [MaxLength(7)] - public string? TextColor { get; set; } = string.Empty; - - /// - /// Orders the routes in a way which is ideal for presentation to customers. - /// Routes with smaller route_sort_order values should be displayed first. - /// - [Column("route_sort_order")] - public int SortOrder { get; set; } = 1; -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStop.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStop.cs deleted file mode 100644 index f604c5f..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStop.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Costasdev.ServiceViewer.Data.Gtfs.Enums; -using Microsoft.EntityFrameworkCore; -using NetTopologySuite.Geometries; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_stops")] -[PrimaryKey(nameof(Id), nameof(FeedId))] -public class GtfsStop -{ - [Column("stop_id")] - [MaxLength(32)] - public required string Id { get; set; } - - [Column("feed_id")]public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("stop_code")] - [MaxLength(32)] - public string Code { get; set; } = string.Empty; - - [Column("stop_name")] - [MaxLength(255)] - public string Name { get; set; } = string.Empty; - - [Column("stop_desc")] - [MaxLength(255)] - public string? Description { get; set; } - - [Column("stop_pos")] - public Point? Position { get; set; } - - [Column("stop_url")] - [MaxLength(255)] - public string? Url { get; set; } - - [Column("stop_timezone")] - [MaxLength(50)] - public string? Timezone { get; set; } - - [Column("wheelchair_boarding")] - public WheelchairBoarding WheelchairBoarding { get; set; } = WheelchairBoarding.Unknown; - - // [Column("location_type")] - // public int LocationType { get; set; } - // - // [Column("parent_station")] - // public int? ParentStationId { get; set; } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStopTime.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStopTime.cs deleted file mode 100644 index 9599947..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsStopTime.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Costasdev.ServiceViewer.Data.Extensions; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_stop_times")] -[PrimaryKey(nameof(TripId), nameof(StopSequence), nameof(FeedId))] -public class GtfsStopTime -{ - [Column("trip_id")] - [ForeignKey("TripId")] - [MaxLength(32)] - public string TripId { get; set; } = null!; - - [Column("feed_id")]public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [ForeignKey(nameof(TripId))] public GtfsTrip GtfsTrip { get; set; } = null!; - - [Column("arrival_time")] public string Arrival { get; set; } - public TimeSpan ArrivalTime => TimeSpan.FromGtfsTime(Arrival); - - [Column("departure_time")] public string Departure { get; set; } - public TimeSpan DepartureTime => TimeSpan.FromGtfsTime(Departure); - - [Column("stop_id")] - [ForeignKey(nameof(GtfsStop))] - [MaxLength(32)] - public required string StopId { get; set; } - - [ForeignKey(nameof(StopId))] public GtfsStop GtfsStop { get; set; } = null!; - - [Column("stop_sequence")] public int StopSequence { get; set; } = 0; - - // [Column("pickup_type")] - // public int? PickupType { get; set; } - // - // [Column("drop_off_type")] - // public int? DropOffType { get; set; } - - [Column("shape_dist_traveled")] public double? ShapeDistTraveled { get; set; } = null!; -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsTrip.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsTrip.cs deleted file mode 100644 index 3614120..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Gtfs/GtfsTrip.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Costasdev.ServiceViewer.Data.Gtfs.Enums; -using Microsoft.EntityFrameworkCore; - -namespace Costasdev.ServiceViewer.Data.Gtfs; - -[Table("gtfs_trips")] -[PrimaryKey(nameof(Id), nameof(FeedId))] -public class GtfsTrip -{ - [Column("trip_id")] [MaxLength(32)] public string Id { get; set; } = null!; - - [Column("feed_id")] public int FeedId { get; set; } - [ForeignKey(nameof(FeedId))] public required Feed Feed { get; set; } - - [Column("route_id")] - [MaxLength(32)] - [ForeignKey(nameof(Route))] - public string RouteId { get; set; } = null!; - - [ForeignKey(nameof(RouteId))] public GtfsRoute Route { get; set; } = null!; - - [Column("service_id")] [MaxLength(32)] public string ServiceId { get; set; } = null!; - - [Column("trip_headsign")] - [MaxLength(255)] - public string? TripHeadsign { get; set; } - - [Column("trip_short_name")] - [MaxLength(255)] - public string? TripShortName { get; set; } - - [Column("direction_id")] public DirectionId DirectionId { get; set; } = DirectionId.Outbound; - - /// - /// Identifies the block to which the trip belongs. A block consists of a single trip or many - /// sequential trips made using the same vehicle, defined by shared service days and block_id. - /// A block_id may have trips with different service days, making distinct blocks. - /// - [Column("block_id")] - [MaxLength(32)] - public string? BlockId { get; set; } - - /// - /// Identifies a geospatial shape describing the vehicle travel path for a trip. - /// - /// To be implemented: will be stored as a GeoJSON file instead of database records. - [Column("shape_id")] - [MaxLength(32)] - public string? ShapeId { get; set; } - - [Column("trip_wheelchair_accessible")] - public TripWheelchairAccessible TripWheelchairAccessible { get; set; } = TripWheelchairAccessible.Empty; - - [Column("trip_bikes_allowed")] public TripBikesAllowed TripBikesAllowed { get; set; } = TripBikesAllowed.Empty; -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.Designer.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.Designer.cs deleted file mode 100644 index 79f3e87..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.Designer.cs +++ /dev/null @@ -1,547 +0,0 @@ -// -using System; -using Costasdev.ServiceViewer.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NetTopologySuite.Geometries; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Data.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20251211153852_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis"); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.Feed", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("DownloadUrl") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Etag") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("InsertedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LongName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("ShortName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.HasKey("Id"); - - b.ToTable("feeds"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", b => - { - b.Property("Id") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_email"); - - b.Property("FareUrl") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_fare_url"); - - b.Property("Language") - .IsRequired() - .HasMaxLength(5) - .HasColumnType("character varying(5)") - .HasColumnName("agency_lang"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_name"); - - b.Property("Phone") - .HasMaxLength(30) - .HasColumnType("character varying(30)") - .HasColumnName("agency_phone"); - - b.Property("Timezone") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)") - .HasColumnName("agency_timezone"); - - b.Property("Url") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_url"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_agencies"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendar", b => - { - b.Property("ServiceId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("EndDate") - .HasColumnType("date") - .HasColumnName("end_date"); - - b.Property("Friday") - .HasColumnType("boolean") - .HasColumnName("friday"); - - b.Property("Monday") - .HasColumnType("boolean") - .HasColumnName("monday"); - - b.Property("Saturday") - .HasColumnType("boolean") - .HasColumnName("saturday"); - - b.Property("StartDate") - .HasColumnType("date") - .HasColumnName("start_date"); - - b.Property("Sunday") - .HasColumnType("boolean") - .HasColumnName("sunday"); - - b.Property("Thursday") - .HasColumnType("boolean") - .HasColumnName("thursday"); - - b.Property("Tuesday") - .HasColumnType("boolean") - .HasColumnName("tuesday"); - - b.Property("Wednesday") - .HasColumnType("boolean") - .HasColumnName("wednesday"); - - b.HasKey("ServiceId", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_calendar"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendarDate", b => - { - b.Property("ServiceId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("ExceptionType") - .HasColumnType("integer") - .HasColumnName("exception_type"); - - b.HasKey("ServiceId", "Date", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_calendar_dates"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", b => - { - b.Property("Id") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("AgencyId") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_id"); - - b.Property("Color") - .HasMaxLength(7) - .HasColumnType("character varying(7)") - .HasColumnName("route_color"); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_desc"); - - b.Property("LongName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_long_name"); - - b.Property("ShortName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("route_short_name"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasColumnName("route_sort_order"); - - b.Property("TextColor") - .HasMaxLength(7) - .HasColumnType("character varying(7)") - .HasColumnName("route_text_color"); - - b.Property("Type") - .HasColumnType("integer") - .HasColumnName("route_type"); - - b.Property("Url") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_url"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("AgencyId", "FeedId"); - - b.ToTable("gtfs_routes"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", b => - { - b.Property("Id") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_code"); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_desc"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_name"); - - b.Property("Position") - .HasColumnType("geometry") - .HasColumnName("stop_pos"); - - b.Property("Timezone") - .HasMaxLength(50) - .HasColumnType("character varying(50)") - .HasColumnName("stop_timezone"); - - b.Property("Url") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_url"); - - b.Property("WheelchairBoarding") - .HasColumnType("integer") - .HasColumnName("wheelchair_boarding"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_stops"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStopTime", b => - { - b.Property("TripId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("trip_id"); - - b.Property("StopSequence") - .HasColumnType("integer") - .HasColumnName("stop_sequence"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Arrival") - .IsRequired() - .HasColumnType("text") - .HasColumnName("arrival_time"); - - b.Property("Departure") - .IsRequired() - .HasColumnType("text") - .HasColumnName("departure_time"); - - b.Property("ShapeDistTraveled") - .HasColumnType("double precision") - .HasColumnName("shape_dist_traveled"); - - b.Property("StopId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_id"); - - b.HasKey("TripId", "StopSequence", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("StopId", "FeedId"); - - b.HasIndex("TripId", "FeedId"); - - b.ToTable("gtfs_stop_times"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", b => - { - b.Property("Id") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("trip_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("BlockId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("block_id"); - - b.Property("DirectionId") - .HasColumnType("integer") - .HasColumnName("direction_id"); - - b.Property("RouteId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("route_id"); - - b.Property("ServiceId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("ShapeId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("shape_id"); - - b.Property("TripBikesAllowed") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasDefaultValue(0) - .HasColumnName("trip_bikes_allowed"); - - b.Property("TripHeadsign") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("trip_headsign"); - - b.Property("TripShortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("trip_short_name"); - - b.Property("TripWheelchairAccessible") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasDefaultValue(0) - .HasColumnName("trip_wheelchair_accessible"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("RouteId", "FeedId"); - - b.ToTable("gtfs_trips"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendar", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendarDate", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", "Agency") - .WithMany() - .HasForeignKey("AgencyId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Agency"); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStopTime", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", "GtfsStop") - .WithMany() - .HasForeignKey("StopId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", "GtfsTrip") - .WithMany() - .HasForeignKey("TripId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - - b.Navigation("GtfsStop"); - - b.Navigation("GtfsTrip"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", "Route") - .WithMany() - .HasForeignKey("RouteId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - - b.Navigation("Route"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.cs deleted file mode 100644 index 5a75d40..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/20251211153852_Initial.cs +++ /dev/null @@ -1,318 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using NetTopologySuite.Geometries; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Data.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterDatabase() - .Annotation("Npgsql:PostgresExtension:postgis", ",,"); - - migrationBuilder.CreateTable( - name: "feeds", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ShortName = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - LongName = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - DownloadUrl = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - Etag = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - InsertedAt = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_feeds", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "gtfs_agencies", - columns: table => new - { - agency_id = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - agency_name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - agency_url = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - agency_timezone = table.Column(type: "character varying(50)", maxLength: 50, nullable: false), - agency_lang = table.Column(type: "character varying(5)", maxLength: 5, nullable: false), - agency_phone = table.Column(type: "character varying(30)", maxLength: 30, nullable: true), - agency_email = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - agency_fare_url = table.Column(type: "character varying(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_agencies", x => new { x.agency_id, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_agencies_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_calendar", - columns: table => new - { - service_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - monday = table.Column(type: "boolean", nullable: false), - tuesday = table.Column(type: "boolean", nullable: false), - wednesday = table.Column(type: "boolean", nullable: false), - thursday = table.Column(type: "boolean", nullable: false), - friday = table.Column(type: "boolean", nullable: false), - saturday = table.Column(type: "boolean", nullable: false), - sunday = table.Column(type: "boolean", nullable: false), - start_date = table.Column(type: "date", nullable: false), - end_date = table.Column(type: "date", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_calendar", x => new { x.service_id, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_calendar_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_calendar_dates", - columns: table => new - { - service_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - date = table.Column(type: "timestamp with time zone", nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - exception_type = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_calendar_dates", x => new { x.service_id, x.date, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_calendar_dates_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_stops", - columns: table => new - { - stop_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - stop_code = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - stop_name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - stop_desc = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - stop_pos = table.Column(type: "geometry", nullable: true), - stop_url = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - stop_timezone = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), - wheelchair_boarding = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_stops", x => new { x.stop_id, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_stops_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_routes", - columns: table => new - { - route_id = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - agency_id = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - route_short_name = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - route_long_name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), - route_desc = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - route_type = table.Column(type: "integer", nullable: false), - route_url = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - route_color = table.Column(type: "character varying(7)", maxLength: 7, nullable: true), - route_text_color = table.Column(type: "character varying(7)", maxLength: 7, nullable: true), - route_sort_order = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_routes", x => new { x.route_id, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_routes_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_gtfs_routes_gtfs_agencies_agency_id_feed_id", - columns: x => new { x.agency_id, x.feed_id }, - principalTable: "gtfs_agencies", - principalColumns: new[] { "agency_id", "feed_id" }, - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_trips", - columns: table => new - { - trip_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - route_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - service_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - trip_headsign = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - trip_short_name = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - direction_id = table.Column(type: "integer", nullable: false), - block_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), - shape_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), - trip_wheelchair_accessible = table.Column(type: "integer", nullable: false, defaultValue: 0), - trip_bikes_allowed = table.Column(type: "integer", nullable: false, defaultValue: 0) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_trips", x => new { x.trip_id, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_trips_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_gtfs_trips_gtfs_routes_route_id_feed_id", - columns: x => new { x.route_id, x.feed_id }, - principalTable: "gtfs_routes", - principalColumns: new[] { "route_id", "feed_id" }, - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "gtfs_stop_times", - columns: table => new - { - trip_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - feed_id = table.Column(type: "integer", nullable: false), - stop_sequence = table.Column(type: "integer", nullable: false), - arrival_time = table.Column(type: "text", nullable: false), - departure_time = table.Column(type: "text", nullable: false), - stop_id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), - shape_dist_traveled = table.Column(type: "double precision", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_gtfs_stop_times", x => new { x.trip_id, x.stop_sequence, x.feed_id }); - table.ForeignKey( - name: "FK_gtfs_stop_times_feeds_feed_id", - column: x => x.feed_id, - principalTable: "feeds", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_gtfs_stop_times_gtfs_stops_stop_id_feed_id", - columns: x => new { x.stop_id, x.feed_id }, - principalTable: "gtfs_stops", - principalColumns: new[] { "stop_id", "feed_id" }, - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_gtfs_stop_times_gtfs_trips_trip_id_feed_id", - columns: x => new { x.trip_id, x.feed_id }, - principalTable: "gtfs_trips", - principalColumns: new[] { "trip_id", "feed_id" }, - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_agencies_feed_id", - table: "gtfs_agencies", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_calendar_feed_id", - table: "gtfs_calendar", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_calendar_dates_feed_id", - table: "gtfs_calendar_dates", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_routes_agency_id_feed_id", - table: "gtfs_routes", - columns: new[] { "agency_id", "feed_id" }); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_routes_feed_id", - table: "gtfs_routes", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_stop_times_feed_id", - table: "gtfs_stop_times", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_stop_times_stop_id_feed_id", - table: "gtfs_stop_times", - columns: new[] { "stop_id", "feed_id" }); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_stop_times_trip_id_feed_id", - table: "gtfs_stop_times", - columns: new[] { "trip_id", "feed_id" }); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_stops_feed_id", - table: "gtfs_stops", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_trips_feed_id", - table: "gtfs_trips", - column: "feed_id"); - - migrationBuilder.CreateIndex( - name: "IX_gtfs_trips_route_id_feed_id", - table: "gtfs_trips", - columns: new[] { "route_id", "feed_id" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "gtfs_calendar"); - - migrationBuilder.DropTable( - name: "gtfs_calendar_dates"); - - migrationBuilder.DropTable( - name: "gtfs_stop_times"); - - migrationBuilder.DropTable( - name: "gtfs_stops"); - - migrationBuilder.DropTable( - name: "gtfs_trips"); - - migrationBuilder.DropTable( - name: "gtfs_routes"); - - migrationBuilder.DropTable( - name: "gtfs_agencies"); - - migrationBuilder.DropTable( - name: "feeds"); - } - } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/AppDbContextModelSnapshot.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/AppDbContextModelSnapshot.cs deleted file mode 100644 index feb3813..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/Migrations/AppDbContextModelSnapshot.cs +++ /dev/null @@ -1,544 +0,0 @@ -// -using System; -using Costasdev.ServiceViewer.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using NetTopologySuite.Geometries; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Data.Migrations -{ - [DbContext(typeof(AppDbContext))] - partial class AppDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis"); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.Feed", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("DownloadUrl") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("Etag") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("InsertedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("LongName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("ShortName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.HasKey("Id"); - - b.ToTable("feeds"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", b => - { - b.Property("Id") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Email") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_email"); - - b.Property("FareUrl") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_fare_url"); - - b.Property("Language") - .IsRequired() - .HasMaxLength(5) - .HasColumnType("character varying(5)") - .HasColumnName("agency_lang"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_name"); - - b.Property("Phone") - .HasMaxLength(30) - .HasColumnType("character varying(30)") - .HasColumnName("agency_phone"); - - b.Property("Timezone") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)") - .HasColumnName("agency_timezone"); - - b.Property("Url") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_url"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_agencies"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendar", b => - { - b.Property("ServiceId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("EndDate") - .HasColumnType("date") - .HasColumnName("end_date"); - - b.Property("Friday") - .HasColumnType("boolean") - .HasColumnName("friday"); - - b.Property("Monday") - .HasColumnType("boolean") - .HasColumnName("monday"); - - b.Property("Saturday") - .HasColumnType("boolean") - .HasColumnName("saturday"); - - b.Property("StartDate") - .HasColumnType("date") - .HasColumnName("start_date"); - - b.Property("Sunday") - .HasColumnType("boolean") - .HasColumnName("sunday"); - - b.Property("Thursday") - .HasColumnType("boolean") - .HasColumnName("thursday"); - - b.Property("Tuesday") - .HasColumnType("boolean") - .HasColumnName("tuesday"); - - b.Property("Wednesday") - .HasColumnType("boolean") - .HasColumnName("wednesday"); - - b.HasKey("ServiceId", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_calendar"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendarDate", b => - { - b.Property("ServiceId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("ExceptionType") - .HasColumnType("integer") - .HasColumnName("exception_type"); - - b.HasKey("ServiceId", "Date", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_calendar_dates"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", b => - { - b.Property("Id") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("AgencyId") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("agency_id"); - - b.Property("Color") - .HasMaxLength(7) - .HasColumnType("character varying(7)") - .HasColumnName("route_color"); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_desc"); - - b.Property("LongName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_long_name"); - - b.Property("ShortName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("route_short_name"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasColumnName("route_sort_order"); - - b.Property("TextColor") - .HasMaxLength(7) - .HasColumnType("character varying(7)") - .HasColumnName("route_text_color"); - - b.Property("Type") - .HasColumnType("integer") - .HasColumnName("route_type"); - - b.Property("Url") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("route_url"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("AgencyId", "FeedId"); - - b.ToTable("gtfs_routes"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", b => - { - b.Property("Id") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_code"); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_desc"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_name"); - - b.Property("Position") - .HasColumnType("geometry") - .HasColumnName("stop_pos"); - - b.Property("Timezone") - .HasMaxLength(50) - .HasColumnType("character varying(50)") - .HasColumnName("stop_timezone"); - - b.Property("Url") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("stop_url"); - - b.Property("WheelchairBoarding") - .HasColumnType("integer") - .HasColumnName("wheelchair_boarding"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.ToTable("gtfs_stops"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStopTime", b => - { - b.Property("TripId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("trip_id"); - - b.Property("StopSequence") - .HasColumnType("integer") - .HasColumnName("stop_sequence"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("Arrival") - .IsRequired() - .HasColumnType("text") - .HasColumnName("arrival_time"); - - b.Property("Departure") - .IsRequired() - .HasColumnType("text") - .HasColumnName("departure_time"); - - b.Property("ShapeDistTraveled") - .HasColumnType("double precision") - .HasColumnName("shape_dist_traveled"); - - b.Property("StopId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("stop_id"); - - b.HasKey("TripId", "StopSequence", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("StopId", "FeedId"); - - b.HasIndex("TripId", "FeedId"); - - b.ToTable("gtfs_stop_times"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", b => - { - b.Property("Id") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("trip_id"); - - b.Property("FeedId") - .HasColumnType("integer") - .HasColumnName("feed_id"); - - b.Property("BlockId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("block_id"); - - b.Property("DirectionId") - .HasColumnType("integer") - .HasColumnName("direction_id"); - - b.Property("RouteId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("route_id"); - - b.Property("ServiceId") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("service_id"); - - b.Property("ShapeId") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("shape_id"); - - b.Property("TripBikesAllowed") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasDefaultValue(0) - .HasColumnName("trip_bikes_allowed"); - - b.Property("TripHeadsign") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("trip_headsign"); - - b.Property("TripShortName") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("trip_short_name"); - - b.Property("TripWheelchairAccessible") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasDefaultValue(0) - .HasColumnName("trip_wheelchair_accessible"); - - b.HasKey("Id", "FeedId"); - - b.HasIndex("FeedId"); - - b.HasIndex("RouteId", "FeedId"); - - b.ToTable("gtfs_trips"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendar", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsCalendarDate", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsAgency", "Agency") - .WithMany() - .HasForeignKey("AgencyId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Agency"); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsStopTime", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsStop", "GtfsStop") - .WithMany() - .HasForeignKey("StopId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", "GtfsTrip") - .WithMany() - .HasForeignKey("TripId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - - b.Navigation("GtfsStop"); - - b.Navigation("GtfsTrip"); - }); - - modelBuilder.Entity("Costasdev.ServiceViewer.Data.Gtfs.GtfsTrip", b => - { - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.Feed", "Feed") - .WithMany() - .HasForeignKey("FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Costasdev.ServiceViewer.Data.Gtfs.GtfsRoute", "Route") - .WithMany() - .HasForeignKey("RouteId", "FeedId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Feed"); - - b.Navigation("Route"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Costasdev.Busurbano.ServiceViewer/Data/QueryExtensions/GtfsCalendarQueryExtensions.cs b/src/Costasdev.Busurbano.ServiceViewer/Data/QueryExtensions/GtfsCalendarQueryExtensions.cs deleted file mode 100644 index f5fc2bb..0000000 --- a/src/Costasdev.Busurbano.ServiceViewer/Data/QueryExtensions/GtfsCalendarQueryExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Costasdev.ServiceViewer.Data.Gtfs; - -namespace Costasdev.ServiceViewer.Data.QueryExtensions; - -public static class GtfsCalendarQueryExtensions -{ - public static IQueryable WhereDayOfWeek(this IQueryable query, DayOfWeek dayOfWeek) - { - return dayOfWeek switch - { - DayOfWeek.Monday => query.Where(c => c.Monday), - DayOfWeek.Tuesday => query.Where(c => c.Tuesday), - DayOfWeek.Wednesday => query.Where(c => c.Wednesday), - DayOfWeek.Thursday => query.Where(c => c.Thursday), - DayOfWeek.Friday => query.Where(c => c.Friday), - DayOfWeek.Saturday => query.Where(c => c.Saturday), - DayOfWeek.Sunday => query.Where(c => c.Sunday), - _ => query - }; - } -} -- cgit v1.3