using System.Text.Json; namespace View_by_Distance.Shared.Models.Stateless.Methods; internal abstract class Person { // ... internal static (Models.PersonBirthday?, string) Get(string personBirthdayFormat, string personDisplayDirectory, string personKeyDirectory, DateTime birthday) { Models.PersonBirthday? personBirthday = new(birthday); string personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday); string convertedPersonKeyDirectory = Path.Combine(personDisplayDirectory, personKeyFormatted); if (!Directory.Exists(convertedPersonKeyDirectory)) Directory.Move(personKeyDirectory, convertedPersonKeyDirectory); return new(personBirthday, personKeyFormatted); } internal static Models.Person GetPerson(char[] personCharacters, string personDisplayDirectoryName, string[] personDisplayDirectoryAllFiles, long personKey, Models.PersonBirthday personBirthday) { Models.Person result; string[] matches; List urls = new(); Models.PersonId id = new(personKey); List emails = new(); List numbers = new(); List comments = new(); List addresses = new(); string checkFileName = $"{personDisplayDirectoryName.First()}.json"; string nameWithoutApproximateYears = personDisplayDirectoryName.Split(personCharacters).First(); matches = (from l in personDisplayDirectoryAllFiles where Path.GetFileName(l) == checkFileName select l).ToArray(); Models.PersonName? name; if (!matches.Any()) name = PersonName.GetPersonName(nameWithoutApproximateYears); else { string json = File.ReadAllText(matches.First()); name = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); name ??= PersonName.GetPersonName(nameWithoutApproximateYears); if (name.Last is null || string.IsNullOrEmpty(name.Last.Value)) name = PersonName.GetPersonName(nameWithoutApproximateYears); } result = new(id, personBirthday, name, comments, urls, numbers, emails, addresses); return result; } }