diff --git a/Lib_CSharp b/Lib_CSharp index 9edfc6be..ce4a59cf 160000 --- a/Lib_CSharp +++ b/Lib_CSharp @@ -1 +1 @@ -Subproject commit 9edfc6be872db708abd986d9504800da41b2a9bb +Subproject commit ce4a59cf4a90cf74a3a9116ccbaf6d2e588dc8ad diff --git a/PoliNetwork.Graduatorie.Parser/Objects/Json/DateFound.cs b/PoliNetwork.Graduatorie.Parser/Objects/Json/DateFound.cs index e12a861f..c3d1aea8 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/Json/DateFound.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/Json/DateFound.cs @@ -23,29 +23,47 @@ public void WriteToFile(string dataFolder) File.WriteAllText(path, s); } - - public static DateTime MinDateTime(DateTime date1, DateTime date2) + public static DateTime? MinDateTime(DateTime? date1, DateTime? date2) { + if (date1 == null && date2 == null) + return null; + if (date1 == null) + return date2; + if (date2 == null) + return date1; + return date1 < date2 ? date1 : date2; } public void UpdateDateFound(Ranking variable) { var path = variable.GetPath().Trim(); + var minDateTime = GetMinTime(variable, path); + SetDate(path, minDateTime); + } + private void SetDate(string path, DateTime? minDateTime) + { FirstDate ??= new SortedDictionary(); + FirstDate[path] = minDateTime; + } + private DateTime? GetMinTime(Ranking variable, string path) + { + FirstDate ??= new SortedDictionary(); var dateTime = new DateTime(variable.Year ?? DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day); - if (FirstDate.TryGetValue(path, out var oldValue)) - { - if (oldValue == null) - FirstDate[path] = dateTime; - else - FirstDate[path] = MinDateTime(dateTime, oldValue.Value); - } - else + var tryGetValue = TryGetValue(FirstDate, path); + var minDateTime = tryGetValue.Item2 switch { - FirstDate[path] = dateTime; - } + true => MinDateTime(dateTime, tryGetValue.Item1), + _ => dateTime + }; + return minDateTime; + } + + public static Tuple TryGetValue(SortedDictionary d, string path) + { + var tryGetValue = d.TryGetValue(path, out var oldValue); + return new Tuple(oldValue, tryGetValue); } } \ No newline at end of file diff --git a/PoliNetwork.Graduatorie.Parser/Objects/Json/Indexes/Specific/BySchoolYearCourseJson.cs b/PoliNetwork.Graduatorie.Parser/Objects/Json/Indexes/Specific/BySchoolYearCourseJson.cs index 380a36af..d13ff51d 100644 --- a/PoliNetwork.Graduatorie.Parser/Objects/Json/Indexes/Specific/BySchoolYearCourseJson.cs +++ b/PoliNetwork.Graduatorie.Parser/Objects/Json/Indexes/Specific/BySchoolYearCourseJson.cs @@ -262,17 +262,15 @@ SingleCourseJson variable private static void AddToRankings(ICollection rankings, Ranking ranking) { - if ( - rankings.Any( - x => - x.School == ranking.School - && x.Year == ranking.Year - && Similar(x.ByCourse, ranking.ByCourse) - ) - ) - return; - - rankings.Add(ranking); + var any = rankings.Any( + x => + x.School == ranking.School + && x.Year == ranking.Year + && Similar(x.ByCourse, ranking.ByCourse) + ); + + if (!any) + rankings.Add(ranking); } private static bool Similar( @@ -282,7 +280,10 @@ private static bool Similar( { if (a == null || b == null) return false; - return a.Count == b.Count - && a.Select(variable => b.Any(x => x.Title == variable.Title)).All(boolB => boolB); + return a.Count == b.Count && a.Select(Selector).All(Predicate); + + bool Selector(CourseTable variable) => b.Any(x => x.Title == variable.Title); + bool Predicate(bool boolB) => boolB; + } } \ No newline at end of file