using HyperBooru.ApiModels; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace HyperBooru; public class Media : HBObject { public string? ShortDescription { get; set; } public string? LongDescription { get; set; } public virtual OcrData? OcrData { get; set; } public virtual UploadedFile? CurrentUploadedFile { get; set; } public virtual List UploadedFiles { get; set; } = new(); public bool IsIngest => Tags .Select(t => t.TagDefinitionId) .Contains((int) HBObjectId.IngestTag); public string? DisplayName { get { if(ShortDescription is not null) return ShortDescription; return UploadedFiles .OrderBy(f => f.UploadTime) .First()?.Filename ?? Guid.ToString().ToUpper(); } } public static explicit operator ApiModels.Media(Media media) => new() { MediaId = media.Guid, ShortDescription = media.ShortDescription, LongDescription = media.LongDescription }; } public class UploadedFile : HBObject { public string Checksum { get; set; } public bool ChecksumVerified { get; set; } = false; public string? Filename { get; set; } public long Length { get; set; } public string MimeType { get; set; } public int? Width { get; set; } public int? Height { get; set; } public DateTime UploadTime { get; set; } = DateTime.UtcNow; public DateTime? LastAccessTime { get; set; } public DateTime? LastWriteTime { get; set; } public DateTime? CreateTime { get; set; } public string? Path { get; set; } public PathType? PathType { get; set; } public virtual Media Media { get; set; } public static explicit operator ApiModels.UploadedFile(UploadedFile uploadedFile) => new() { MediaId = uploadedFile.Media.Guid, UploadedFileId = uploadedFile.Guid, Checksum = uploadedFile.Checksum, ChecksumVerified = uploadedFile.ChecksumVerified, Filename = uploadedFile.Filename, Length = uploadedFile.Length, MimeType = uploadedFile.MimeType, Width = uploadedFile.Width, Height = uploadedFile.Height, UploadTime = uploadedFile.UploadTime, LastAccessTime = uploadedFile.LastAccessTime, LastWriteTime = uploadedFile.LastWriteTime, CreateTime = uploadedFile.CreateTime, Path = uploadedFile.Path, PathType = (ApiModels.PathType?) uploadedFile.PathType }; } public class OcrData { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int OcrDataId { get; set; } [ForeignKey("ObjectId")] public int MediaId { get; set; } public string Text { get; set; } public string SearchableText { get; set; } public DateTime Timestamp { get; set; } public virtual Media Media { get; set; } public static explicit operator ApiModels.OcrData(OcrData ocrData) => new() { MediaId = ocrData.Media.Guid, Text = ocrData.Text, SearchableText = ocrData.SearchableText, Timestamp = ocrData.Timestamp }; }