using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public record MappingFromItem(DateTime[] ContainerDateTimes, DateTime? DateTimeDigitized, DateTime? DateTimeOriginal, int Id, bool? IsArchive, FilePath FilePath, bool? IsWrongYear, string[] Keywords, DateTime MinimumDateTime, string? Model, string RelativePath, FileHolder ResizedFileHolder) { public override string ToString() { string result = JsonSerializer.Serialize(this, MappingFromItemGenerationContext.Default.MappingFromItem); return result; } public DateTime GetDateTimeOriginalThenMinimumDateTime() => DateTimeOriginal is not null ? DateTimeOriginal.Value : MinimumDateTime; internal static MappingFromItem GetMappingFromItem(DateTime[] containerDateTimes, Item item, FileHolder? resizedFileHolder) { MappingFromItem result; if (item.Property?.Id is null) throw new NotSupportedException(); if (resizedFileHolder is null) throw new NotSupportedException(); List dateTimes = item.Property.GetDateTimes(); DateTime minimumDateTime = Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); (bool? isWrongYear, _) = Stateless.Methods.IProperty.IsWrongYear(item.FilePath, item.Property.DateTimeOriginal, dateTimes); result = new(containerDateTimes, item.Property.DateTimeDigitized, item.Property.DateTimeOriginal, item.Property.Id.Value, item.IsArchive, item.FilePath, isWrongYear, item.Property.Keywords ?? [], minimumDateTime, item.Property.Model, item.RelativePath, resizedFileHolder); return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(MappingFromItem))] public partial class MappingFromItemGenerationContext : JsonSerializerContext { }