public async Task <string> React(PublicId userId, PublicId toId, ReactionType type) { var reaction = (ActivityObject)Activator.CreateInstance(CustomJsonSerializer.TypeOf(type.ToString())); reaction.actor = new List <BaseObject> { new Common.Person { PublicId = userId, } }.ToCollection(); var target = await _activityContent.Get(toId, userId); if (target != null) { reaction.target = new List <BaseObject> { target }.ToCollection(); var res = await _activityStream.Post("outbox", reaction); return(reaction.id); } else { return(null); } }
// private async Task SendOutNotifications(BaseObject post) // { // if (post.PostType == PostType.Text) // { // await SendOutNotificationsToTagFollowers(post); // await SendOutNotificationsToPosterFollowers(post); // await SendOutNotificationsToMentioned(post); // } // } // private async Task SendOutNotificationsToTagFollowers(BaseObject post) // { // var tagIds = post.Tags.Select(t => t.Tag).ToArray(); // var tagFollowers = await _dbContext.FollowingPostTags.Where(f => tagIds.Contains(f.Tag)).Select(u => u.UserId).Distinct().ToArrayAsync(); // if (tagFollowers.Length > 0) // { // await _notifications.Publish(new Models.AhPushIt.Notification() { // FromUserId = post.UserId, // SubjectId = post.Id, // Priority = NotificationPriority.Normal, // Subject = ReactionSubject.Post, // Type = NotificationType.TEXT_POST_FOLLOWED_TAG, // }, tagFollowers.Select(id => new PublicId(id, 0)).ToArray()); // } // } // private async Task SendOutNotificationsToMentioned(BaseObject post) // { // if (post.Mentions.Count > 0) // { // await _notifications.Publish(new Models.AhPushIt.Notification() { // FromUserId = post.UserId, // SubjectId = post.Id, // Priority = NotificationPriority.Normal, // Subject = ReactionSubject.Post, // Type = NotificationType.TEXT_POST_MENTION, // }, post.Mentions.Select(u => new PublicId(u.MentionedUserId, u.MentionedUserPeerId)).ToArray()); // } // } public async Task <BaseObject> TryCreateTextPost(ActorObject publisher, string content, Visibility visibility) { if (string.IsNullOrWhiteSpace(content)) { return(new Error { statusCode = 403, errorCode = 403, summary = "content is empty" }); } var audience = visibility.ToAudience(publisher ?? throw new ArgumentNullException(nameof(publisher))); var audienceList = audience?.IntoNewList <BaseObject>()?.ToCollection(); var from = publisher.IntoNewList <BaseObject>().ToCollection(); var post = new Create { obj = new Note() { content = content, audience = audienceList, from = from, }, from = from, to = audienceList, }; return((await _activityStreams.Post("outbox", post)) ?? post); }