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; }