using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using isnd.Interfaces; using Newtonsoft.Json; using NuGet.Versioning; namespace isnd.Data.Packages { public class Package { [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] [ForeignKey("LatestCommit")] public long CommitNId { get; set; } [NotMapped] public string CommitId { get => CommitNId.ToString(); } public virtual Commit LatestCommit { get; set; } internal static bool ValidateId(string pkgId) { return !string.IsNullOrWhiteSpace(pkgId); } public PackageVersion GetLatestVersion() { var latest = Versions.Max(v => v.NugetVersion); return Versions.FirstOrDefault(v=> v.NugetVersion == latest); } } }