using MongoDB.Bson.Serialization.Attributes; using MongoDB.Entities; namespace PrivaPub.Models.Post { public class Post : Entity { public string GroupUserId { get; set; }//local author's Avatar.ID public string AuthorAccountId { get; set; }//Avatar.ID or ForeignAvatar.ID public string AnsweringToPostId { get; set; }//the parent's Post.ID when we hold it public string InReplyToURI { get; set; } public string InReplyToAccountId { get; set; } public string GroupId { get; set; } public string ConversationId { get; set; }//DmGroup.ID of a direct post public string AudienceURI { get; set; }//a remote community the post was made in public string ReblogOfPostId { get; set; } public PostVisibility Visibility { get; set; } public string Title { get; set; } public string SpoilerText { get; set; } public string Text { get; set; } public string ContentHtml { get; set; } public ContentFormat ContentFormat { get; set; } public string Language { get; set; } public List Mentions { get; set; } = new(); public List Tags { get; set; } = new(); public List Media { get; set; } = new(); public List Location { get; set; } = new(); public float RangeKm { get; set; } = 5.0f; [BsonIgnoreIfNull] public Coordinates2D Geo { get; set; } [BsonIgnoreIfNull] public double? Distance { get; set; } public bool HasContentWarning { get; set; } = false; public bool IsLocalOnly { get; set; } public bool IsFederatedCopy { get; set; } public string ObjectURI { get; set; }//the Note's id public string ActivityURI { get; set; }//the Create's id public string ActorURI { get; set; }//attributedTo public string Url { get; set; } public string ContextURI { get; set; } public string QuoteURI { get; set; } public List To { get; set; } = new(); public List Cc { get; set; } = new(); public int RepliesCount { get; set; } public int FavouritesCount { get; set; } public int ReblogsCount { get; set; } public List Revisions { get; set; } = new(); public DateTime CreationDate { get; set; } = DateTime.UtcNow; public DateTime? UpdateDate { get; set; } = DateTime.UtcNow; public DateTime? EditedAt { get; set; } public DateTime? DeletedAt { get; set; } public string UpdateReason { get; set; } } public enum PostVisibility { Public, Unlisted, FollowersOnly, Direct, Circle, LocalGeo } public class PostMention { public string ActorURI { get; set; } public string AccountId { get; set; } public string Handle { get; set; } public bool IsLocal { get; set; } } public class PostRevision { public string Title { get; set; } public string SpoilerText { get; set; } public string ContentHtml { get; set; } public bool HasContentWarning { get; set; } public DateTime EditedAt { get; set; } } }