diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-22 00:04:11 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-22 00:04:11 +0100 |
| commit | 53c3c0293bbacefb9ed0d56f61695f0b76a9f385 (patch) | |
| tree | f634d7ecbbf04e18c9b302dc201851cb5a1ed27d /src/Enmarcha.Backend/Helpers | |
| parent | f1b0b5f7ceaf6d23ae347e12cf29eef617c7dc9b (diff) | |
Urbanos de Lugo
Diffstat (limited to 'src/Enmarcha.Backend/Helpers')
| -rw-r--r-- | src/Enmarcha.Backend/Helpers/SortingHelper.cs | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/src/Enmarcha.Backend/Helpers/SortingHelper.cs b/src/Enmarcha.Backend/Helpers/SortingHelper.cs index fe39521..7fd4e37 100644 --- a/src/Enmarcha.Backend/Helpers/SortingHelper.cs +++ b/src/Enmarcha.Backend/Helpers/SortingHelper.cs @@ -49,12 +49,13 @@ public class SortingHelper var feed = routeId?.Split(':')[0]; - if (feed is "vitrasa" or "tussa") + if (feed is "vitrasa" or "tussa" or "lugo") { int group = feed switch { "vitrasa" => GetVitrasaRouteGroup(shortName), "tussa" => GetTussaRouteGroup(shortName), + "lugo" => GetLugoRouteGroup(shortName), _ => throw new ArgumentOutOfRangeException() }; @@ -90,27 +91,39 @@ public class SortingHelper { // Circular: "C" followed by a digit if (shortName.Length > 1 && shortName[0] == 'C' && char.IsDigit(shortName[1])) + { return 0; + } // Hospital: starts with "H" if (shortName[0] == 'H') + { return 2; + } // Night: "N" followed by a digit if (shortName[0] == 'N' && shortName.Length > 1 && char.IsDigit(shortName[1])) + { return 3; + } // PSA shuttle lines if (shortName.StartsWith("PSA", StringComparison.OrdinalIgnoreCase)) + { return 3; + } // University: "U" followed by a digit if (shortName[0] == 'U' && shortName.Length > 1 && char.IsDigit(shortName[1])) + { return 3; + } // Multi-letter codes with no digits (LZD, PTL) if (shortName.Length >= 2 && shortName.All(char.IsLetter)) + { return 3; + } // Everything else is regular (numbered routes like 4A, 6, 10, single letters like A) return 1; @@ -126,6 +139,45 @@ public class SortingHelper return 0; } + private static int GetLugoRouteGroup(string shortName) + { + if (char.IsLetter(shortName[0])) + { + return 50000; + } + + // Sort something like 2,6,1.1,1.2,1.4,3.1,5.1,PAZO1,PAZO2,CDL + // 1.1, 1.2, 1.4, 2, 3.1, 5.1, 6, then PAZO1, PAZO2, then CDL + if (shortName.Contains('.')) + { + var parts = shortName.Split('.', 2); + if (int.TryParse(parts[0], out int main) && int.TryParse(parts[1], out int sub)) + { + return main * 100 + sub; // 1.1 -> 101, 1.2 -> 102, etc. + } + } + + string numericPart = string.Empty; + foreach (char c in shortName) + { + if (char.IsDigit(c)) + { + numericPart += c; + } + else + { + break; + } + } + + if (int.TryParse(numericPart, out int leadingNumber)) + { + return leadingNumber * 100 + 50; // Sort by leading number if present, with a large multiplier to come after pure numbers + } + + return 0; + } + private static int ExtractNumber(string name) { var digits = new string(name.Where(char.IsDigit).ToArray()); |
