// This file is a part of RSS Bot for Telegram. // License: MIT // Author: CrazyHackGUT aka Kruzya (Sergey Gut) // using System; using System.ComponentModel.DataAnnotations; using System.Text; using Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule; using Telegram.Bot.Types.Enums; namespace Kruzya.TelegramBot.RichSiteSummary.Data; /// /// Represents a post from feed in database. /// public class Post : RepresentableEntity { #region RepresentableEntity protected override ParseMode DefaultRepresentation { get => ParseMode.Html; } protected override string ViewableText { get => Title; } protected override string ViewableUrl { get => UtmUtility.ApplyParameters(new Uri(new(Feed.Url), Url), new UtmParameters() { Source = "telegram", Type = "rss_post", Campaign = "subscriber", Content = PostId.ToString() }); } #endregion /// /// The unique post id. /// [Key] public Guid PostId { get; set; } /// /// The feed unique identifier from where this post is fetched. /// public Guid FeedId { get; set; } /// /// The feed from where this post is fetched. /// [Required] public virtual Feed Feed { get; set; } /// /// The post title. /// [MaxLength(256)] [Required] public string Title { get; set; } /// /// The URI where this post is located in web. /// [Required] [MaxLength(1024)] public string Url { get; set; } /// /// DateTime when post is created in RSS feed. /// [Required] public DateTime PostedAt { get; set; } /// /// DateTime when post is fetched/updated in database. /// [Required] public DateTime ReceivedAt { get; set; } /// /// /// [Required] [MaxLength(64)] public string UrlHash { get; set; } public Post() { PostId = new Guid(); ReceivedAt = DateTime.Now; } public string MessageText { get { var message = new StringBuilder(); message.Append($"{Representation("🗞")} New on {Feed.Representation(ParseMode.Html)}\n"); message.Append("\n"); message.Append(Title); message.Append("\n"); message.Append(Representation("Open in browser")); return message.ToString(); } } }