using System.ComponentModel.DataAnnotations.Schema; namespace HyperBooru; public enum TagSource { Internal, UserTag } public class TagDefinition : HBObject { public TagSource Source { get; set; } = TagSource.Internal; public string? Namespace { get; set; } public string Name { get; set; } public string? Alias { get; set; } public virtual List ImplicitTags { get; set; } = new(); public static explicit operator ApiModels.TagDefinition(TagDefinition tagDefinition) => new() { TagDefinitionId = tagDefinition.Guid, Namespace = tagDefinition.Namespace, Name = tagDefinition.Name, Alias = tagDefinition.Alias, ImplicitTags = tagDefinition.ImplicitTags.Select(td => td.Guid).ToArray() }; } public class Tag : HBObject { [ForeignKey("ObjectId")] public int TagDefinitionId { get; set; } public virtual TagDefinition TagDefinition { get; set; } public DateTime CreateTime { get; set; } = DateTime.UtcNow; public virtual HBObject Target { get; set; } public Tag() {} public Tag(TagDefinition tagDef) => this.TagDefinition = tagDef; }