using NodaTime; using NodaTime.Extensions; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using CoreWiki.Utils; namespace CoreWiki.Models; public class Article { public int Id { get; set; } [Required] public required string Slug { get; set; } [Required, MaxLength(100)] public string? Topic { get; set; } [NotMapped] public Instant Published { get; set; } = SystemClock.Instance.GetCurrentInstant(); [Obsolete("This property is only for serialization")] [DataType(DataType.DateTime)] [Column("Published")] [Required] public DateTime PublishedDateTime { get => Published.ToDateTimeUtc(); set => Published = DateTime.SpecifyKind(value, DateTimeKind.Utc).ToInstant(); } [Required] public required int ViewCount { get; set; } [DataType(DataType.MultilineText)] [Required] public string? Content { get; set; } [NotMapped] public int? EstimatedReadingTime { get { if (Content == null) { return null; } var wpm = 275.00m; var wordCount = Content.Split(" ").Length; return (int)Math.Ceiling(wordCount / wpm); } } public ICollection Comments { get; } = new List(); }