using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using isnd.Data.Catalog; using isnd.Data.Packages.Catalog; using isnd.Interfaces; using Newtonsoft.Json; namespace isnd.Data.Packages { public interface IPackage { string Id { get; set; } string OwnerId { get; set; } string Description { get; set; } bool Public { get; set; } ApplicationUser Owner { get; set; } List Versions { get; set; } long CommitNId { get; set; } string CommitId { get; } Commit LatestCommit { get; set; } DateTimeOffset CommitTimeStamp { get; set; } } public class Package : IObject, IPackage { [Key] [Required] [StringLength(1024)] public string Id { get; set; } [Required] [ForeignKey("Owner")] public string OwnerId { get; set; } [StringLength(1024)] public string Description { get; set; } public bool Public { get; set; } [JsonIgnore] virtual public ApplicationUser Owner { get; set; } [JsonIgnore] public virtual List Versions { get; set; } /// /// Latest version at put, posted, /// or even deletion when no more active version. /// /// [Required] [JsonIgnore] public long CommitNId { get; set; } [NotMapped] public string CommitId { get => CommitNId.ToString(); } [ForeignKey("CommitNId")] public virtual Commit LatestCommit { get; set; } public DateTimeOffset CommitTimeStamp { get; set; } } }