aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Helpers/SortingHelper.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-29 00:41:52 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-29 00:41:52 +0100
commita304c24b32c0327436bbd8c2853e60668e161b42 (patch)
tree08f65c05daca134cf4d2e4f779bd15d98fd66370 /src/Enmarcha.Backend/Helpers/SortingHelper.cs
parent120a3c6bddd0fb8d9fa05df4763596956554c025 (diff)
Rename a lot of stuff, add Santiago real time
Diffstat (limited to 'src/Enmarcha.Backend/Helpers/SortingHelper.cs')
-rw-r--r--src/Enmarcha.Backend/Helpers/SortingHelper.cs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/Enmarcha.Backend/Helpers/SortingHelper.cs b/src/Enmarcha.Backend/Helpers/SortingHelper.cs
new file mode 100644
index 0000000..c70dab2
--- /dev/null
+++ b/src/Enmarcha.Backend/Helpers/SortingHelper.cs
@@ -0,0 +1,35 @@
+namespace Enmarcha.Backend.Helpers;
+
+public class SortingHelper
+{
+ public static int SortRouteShortNames(string? a, string? b)
+ {
+ if (a == null && b == null) return 0;
+ if (a == null) return 1;
+ if (b == null) return -1;
+
+ var aDigits = new string(a.Where(char.IsDigit).ToArray());
+ var bDigits = new string(b.Where(char.IsDigit).ToArray());
+
+ bool aHasDigits = int.TryParse(aDigits, out int aNumber);
+ bool bHasDigits = int.TryParse(bDigits, out int bNumber);
+
+ if (aHasDigits != bHasDigits)
+ {
+ // Non-numeric routes (like "A" or "-") go to the beginning
+ return aHasDigits ? 1 : -1;
+ }
+
+ if (aHasDigits && bHasDigits)
+ {
+ if (aNumber != bNumber)
+ {
+ return aNumber.CompareTo(bNumber);
+ }
+ }
+
+ // If both are non-numeric, or numeric parts are equal, use alphabetical
+ return string.Compare(a, b, StringComparison.OrdinalIgnoreCase);
+ }
+
+}