using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public class MappingFromItem : Properties.IMappingFromItem { public DateTime[] ContainerDateTimes { init; get; } public DateTime? DateTimeDigitized { init; get; } public DateTime? DateTimeOriginal { init; get; } public int Id { init; get; } public FileHolder ImageFileHolder { init; get; } public bool? IsWrongYear { init; get; } public DateTime MinimumDateTime { init; get; } public string? Model { init; get; } public string RelativePath { init; get; } public FileHolder ResizedFileHolder { init; get; } [JsonConstructor] public MappingFromItem(DateTime[] containerDateTimes, DateTime? dateTimeDigitized, DateTime? dateTimeOriginal, int id, FileHolder imageFileHolder, bool? isWrongYear, DateTime minimumDateTime, string? model, string relativePath, FileHolder resizedFileHolder) { ContainerDateTimes = containerDateTimes; DateTimeDigitized = dateTimeDigitized; DateTimeOriginal = dateTimeOriginal; Id = id; ImageFileHolder = imageFileHolder; IsWrongYear = isWrongYear; MinimumDateTime = minimumDateTime; Model = model; RelativePath = relativePath; ResizedFileHolder = resizedFileHolder; } public override string ToString() { string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); 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.ImageFileHolder, item.Property.DateTimeOriginal, dateTimes); result = new(containerDateTimes, item.Property.DateTimeDigitized, item.Property.DateTimeOriginal, item.Property.Id.Value, item.ImageFileHolder, isWrongYear, minimumDateTime, item.Property.Model, item.RelativePath, resizedFileHolder); return result; } }