using Yavsc.Abstract.Identity.Security;
using System.Text.Json.Serialization;
namespace Yavsc.Blogspot;
public class BlogPostDto : IBlogPost
{
public string AuthorId { get; set; }
public BlogPostAuthorDto? Author { get; set; }
public string Article { get; set ; }
public string Photo { get; set ; }
public long Id { get; set; }
public DateTime DateCreated { get; set; }
public string UserCreated { get; set; }
public DateTime DateModified { get; set; }
public string UserModified { get; set; }
public string Title { get; set; }
///
/// Whether this post is published. Derived server-side from
/// the existence of a row in BlogSpotPublication
/// (a row means published, no row means draft). Not stored
/// on BlogPost — it's a computed projection of the
/// publication table, surfaced through the wire DTO so
/// clients can render the current state without a
/// follow-up request. Toggled via
/// PUT /api/BlogApi/{id}/publish.
///
public bool IsPublished { get; set; }
public virtual bool AuthorizeCircle(long circleId)
{
ACL.Add(new CircleAuthorization { CircleId = circleId });
return true;
}
public ICollection ACL = new List();
///
/// Wire-only ACL bridge for System.Text.Json: accepts the
/// acl/ACL payload from GET detail responses,
/// but is never emitted on POST/PUT from the client.
///
[JsonPropertyName("acl")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public List? WireAcl
{
get => null;
set => ACL = value ?? new List();
}
public string[] Tags { get; set; }
ICollection ICircleAuthorized.ACL => this.ACL;
public string[] GetTags() => Tags;
public CircleAuthorization[] GetACL() => ACL.ToArray();
}