POST /api/v1/statuses with scheduled_at no longer posts at once: the post is kept as asked (at least five minutes ahead; 300 waiting, 25 a day, as Mastodon allows), its media kept from the janitor, and a PublishScheduled job publishes it at its time as the persona. scheduled_statuses lists, moves and drops them; a moved post's old job finds it not due. Idempotency-Key holds for scheduling too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using MongoDB.Entities;
|
|
|
|
namespace PrivaPub.Models.Social
|
|
{
|
|
//a post a persona wrote to be published later (Mastodon's scheduled statuses, owner decision 2026-10-04): what it
|
|
//asked for, kept as it asked, published by a PublishScheduled job at ScheduledAt. Nothing leaves before then.
|
|
public class ScheduledStatus : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public DateTime ScheduledAt { get; set; }
|
|
public ScheduledParams Params { get; set; } = new();
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class ScheduledParams
|
|
{
|
|
public string Text { get; set; }
|
|
public string SpoilerText { get; set; }
|
|
public bool Sensitive { get; set; }
|
|
public string Visibility { get; set; }//public, unlisted, private, direct
|
|
public string InReplyToId { get; set; }
|
|
public string Language { get; set; }
|
|
public List<string> MediaIds { get; set; } = new();
|
|
public ScheduledPoll Poll { get; set; }
|
|
public string QuotedStatusId { get; set; }
|
|
public string QuotePolicy { get; set; }
|
|
public string Idempotency { get; set; }
|
|
}
|
|
|
|
public class ScheduledPoll
|
|
{
|
|
public List<string> Options { get; set; } = new();
|
|
public int ExpiresIn { get; set; }
|
|
public bool Multiple { get; set; }
|
|
public bool HideTotals { get; set; }
|
|
}
|
|
}
|