Following records what a local persona follows, local or remote, with
its state and the Follow activity's id. FollowService (behind
/clientapi/follow, /clientapi/unfollow and /clientapi/following):
- resolves @user, user@host or an actor URI;
- a local account is followed in-process: accepted unless it approves
followers by hand, a Follower row on the other side, a community gains
the persona as a member, and a Follow or FollowRequest notification;
- a remote account gets a Follow signed by the persona, at
/grunts/follow-{id}, and stays Requested until an Accept;
- unfollowing deletes the rows, or sends Undo{Follow} to a remote account.
Inbound Accept and Reject are matched to the Follow by its id (or, for an
embedded Follow without one, by its actor), and only from the account that
was followed. A remote Follow now notifies the persona too.
Notification is the per-persona record P1.2 builds on, deduplicated by
type, persona, sender and post. TimelineEntry and Favourite are created
with their indexes for the next commits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using PrivaPub.ClientModels.Resources;
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
namespace PrivaPub.ClientModels.Social
|
|
{
|
|
public class FollowForm
|
|
{
|
|
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource))]
|
|
public string AvatarId { get; set; }
|
|
|
|
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)),
|
|
StringLength(2048, ErrorMessageResourceName = "MaxLengthString", ErrorMessageResourceType = typeof(ErrorsResource))]
|
|
public string Target { get; set; }//user@host, @user, or an actor URI
|
|
}
|
|
|
|
public class ViewFollowing
|
|
{
|
|
public string Id { get; set; }
|
|
public string TargetActorURI { get; set; }
|
|
public string TargetAccountId { get; set; }
|
|
public bool TargetIsLocal { get; set; }
|
|
public string State { get; set; }
|
|
public DateTime CreatedAt { get; set; }
|
|
}
|
|
|
|
public class ViewNotification
|
|
{
|
|
public string Id { get; set; }
|
|
public string Type { get; set; }
|
|
public string FromAccountId { get; set; }
|
|
public string FromActorURI { get; set; }
|
|
public string PostId { get; set; }
|
|
public bool IsRead { get; set; }
|
|
public DateTime CreatedAt { get; set; }
|
|
}
|
|
}
|