An account elsewhere that pins or unpins one of its posts (Add or Remove on its `featured`) now shows those pins on its profile here (`pinned=true`), in its order and its public posts only; a community's announce of a moderator's Add does the same for the community. The `featured` collection itself is read with the account's counts, at most once a day, so pins made before PrivaPub ever saw an account show too. Any other target (Smithereen's wall, a community's moderators) is dropped. A persona's pin and unpin go to the post's audience as Add and Remove on /trophies, as Mastodon sends them. Checked live against Mastodon (scenarios/pins.sh, 8 checks). The town's checker learnt three peer rules from the village: Misskey and Sharkey keep a forwarded reply only with its author's LD signature (only Mastodon signs), they count no renote by a bot, and Mastodon never sees a Lemmy vote on a post in a community. The village of 2026-10-05 checks clean, 2454 of 2454. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
83 lines
2.7 KiB
C#
83 lines
2.7 KiB
C#
using MongoDB.Entities;
|
|
|
|
namespace PrivaPub.Models.Social
|
|
{
|
|
public class Block : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string TargetAccountId { get; set; }
|
|
public string TargetActorURI { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
//a remote account that blocked one of our personas (an inbound Block): its posts and notifications are hidden from the
|
|
//persona, the follows between them are gone, and the relationship says blocked_by, until it sends Undo{Block}
|
|
public class BlockedBy : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string ActorURI { get; set; }
|
|
public string AccountId { get; set; }//the blocker's ForeignAvatar.ID
|
|
public string ActivityURI { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
//a post an account elsewhere features (its `featured` collection, Add and Remove), shown first on its profile here;
|
|
//the lowest Position first
|
|
public class RemoteFeatured : Entity
|
|
{
|
|
public string ActorURI { get; set; }
|
|
public string ObjectURI { get; set; }
|
|
public string PostId { get; set; }
|
|
public int Position { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class Mute : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string TargetAccountId { get; set; }
|
|
public string TargetActorURI { get; set; }
|
|
public bool HideNotifications { get; set; } = true;
|
|
public DateTime? ExpiresAt { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class AccountDomainBlock : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string Domain { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class Bookmark : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string PostId { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class Pin : Entity
|
|
{
|
|
public string AvatarId { get; set; }
|
|
public string PostId { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class Report : Entity
|
|
{
|
|
public string ReporterAvatarId { get; set; }
|
|
public string ReporterActorURI { get; set; }
|
|
public string TargetAccountId { get; set; }
|
|
public string TargetActorURI { get; set; }
|
|
public List<string> PostIds { get; set; } = new();
|
|
public List<string> ObjectURIs { get; set; } = new();
|
|
public string Category { get; set; } = "other";
|
|
public string Comment { get; set; }
|
|
public bool Forwarded { get; set; }
|
|
public bool IsResolved { get; set; }
|
|
public string ResolvedBy { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
public DateTime? ResolvedAt { get; set; }
|
|
}
|
|
}
|