public async Task UploadFile( FeedItem feedItem, JunaUser user, string mimeType, System.IO.Stream fileStream, string targetType, string description) => await UploadFile(feedItem, user, mimeType, fileStream, targetType, null, description);
public Activity Report(JunaUser reportUser, Comment comment, FeedItem reportFeedItem, JunaUser user, Board board, string time) { var reportActivity = new Activity(); if (reportUser != null) { reportActivity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_REPORT) .WithObject(reportUser) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var reportUserActivity = _activityRepository.Save(reportActivity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(reportUserActivity)); var streamActivity = new Stream.Activity(reportUserActivity.Actor, reportUserActivity.Verb, reportUserActivity.Object) { Target = reportUserActivity.Target, ForeignId = reportUserActivity.Id.ToString() }; boardFeed.AddActivity(streamActivity); } if (comment != null) { reportActivity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_REPORT) .WithObject(comment) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var reportCommentActivity = _activityRepository.Save(reportActivity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(reportCommentActivity)); var streamActivity = new Stream.Activity(reportCommentActivity.Actor, reportCommentActivity.Verb, reportCommentActivity.Object) { Target = reportCommentActivity.Target, ForeignId = reportCommentActivity.Id.ToString(), }; boardFeed.AddActivity(streamActivity); } if (reportFeedItem != null) { reportActivity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_REPORT) .WithObject(reportFeedItem) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var reportFeedItemActivity = _activityRepository.Save(reportActivity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(reportFeedItemActivity)); var streamActivity = new Stream.Activity(reportFeedItemActivity.Actor, reportFeedItemActivity.Verb, reportFeedItemActivity.Object) { Target = reportFeedItemActivity.Target, ForeignId = reportFeedItemActivity.Id.ToString(), }; boardFeed.AddActivity(streamActivity); } return reportActivity; }
public List <Board> GetBoardsCreatedByUser(JunaUser user) { var item = DbUtil.Client.CreateDocumentQuery <BoardDO>(CollectionUri) .Where(b => b.CreatedBy.ObjectId == user.ObjectId && b.BoardType == "private") .AsEnumerable().ToList(); return(item == null ? null : _mapper.Map <List <Board> >(item)); }
void Cannot_Create_JunaUser_With_Invalid_Data(string _objectId, string _displayName, string _emailAddress, string _identityProvider, string _country) { Action action = () => { var feed = new JunaUser(_objectId, _displayName, _emailAddress, _identityProvider, _country); }; action.Should().Throw <InvalidOperationException>(); }
public async void CreateFeedItem(Board board, JunaUser user, string contentType, string title, DateTime dateCreated) { var feedItem = new RootCommentFeedItem() { Id = Guid.NewGuid(), ContentType = contentType, Title = title, DateCreated = dateCreated, Actor = user }; _feedItemRepository.Upsert(feedItem); var activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_POST) .WithObject(feedItem) .WithTarget(board) .WithTime(dateCreated) .Build(); var createFeedItemActivity = _activityRepository.Save(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(createFeedItemActivity)); var streamActivity = new Stream.Activity(createFeedItemActivity.Actor, createFeedItemActivity.Verb, createFeedItemActivity.Object) { Target = createFeedItemActivity.Target, ForeignId = createFeedItemActivity.Id.ToString(), }; await boardFeed.AddActivity(streamActivity); if (board.Interactions == null) { board.Interactions = new BoardInteractionMetadata { Likes = 0, Shares = 0, Comments = 0, Followers = 0, Pins = 0, Posts = 0, ActiveUsers = 0 }; } board.Interactions.Posts++; _boardRepository.Upsert(board); await _fcmSenderService.SendFcmBoardNotification( new JunaNotification { Title = title, Actor = user.DisplayName, Action = BoardInteractionMetadata.INTERACTION_POST, ContentType = contentType, ForeignId = board.BoardType.Equals("private")?0 : board.BoardEvent.ForeignId }, board, FCMSenderService.CREATE_OPERATION); }
public JunaUser Create(JunaUser junaUserInput) { var junaUser = junaUserInput; if (junaUser != null) { _junaUserRepository.Save(junaUserInput); } return(junaUser); }
public void UnBlock(JunaUser user, JunaUser blockedUser) { var activity = _activityRepository.GetByActorVerbAndObject( actor: ActivityHelper.GetActor(user), verb: InteractionMetadata.INTERACTION_BLOCK, objectString: ActivityHelper.GetObject(blockedUser) ); var boardFeed = _streamClient.Feed(FeedGroup.UserFeedType, StreamHelper.GetStreamActorId(activity)); boardFeed.RemoveActivity(activity.Id.ToString(), true); if (activity != null) _activityRepository.Delete(activity); }
public void FollowUser(JunaUser user, JunaUser followedUser, DateTime time) { var activity = new ActivityBuilder() .WithActor(user) .WithVerb(InteractionMetadata.INTERACTION_FOLLOW) .WithObject(followedUser) .WithTime(time) .Build(); _activityRepository.Save(activity); var userFeed = _streamClient.Feed(FeedGroup.UserFeedType, user.ObjectId); var followUserFeed = _streamClient.Feed(FeedGroup.UserFeedType, followedUser.ObjectId); userFeed.FollowFeed(FeedGroup.UserFeedType, followedUser.ObjectId); }
public void UnBanUser(Board board, JunaUser user, JunaUser bannedUser) { var activity = _activityRepository.GetByActorVerbObjectandTarget( actor: ActivityHelper.GetActor(user), verb: InteractionMetadata.INTERACTION_BAN, objectString: ActivityHelper.GetObject(bannedUser), target: ActivityHelper.GetTarget(board) ); if (activity != null) { var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(activity)); boardFeed.RemoveActivity(activity.Id.ToString(), true); _activityRepository.Delete(activity); } }
public void UnFollowUser(JunaUser user, JunaUser followedUser) { var activity = _activityRepository.GetByActorVerbAndObject( actor: ActivityHelper.GetActor(user), verb: InteractionMetadata.INTERACTION_FOLLOW, objectString: ActivityHelper.GetObject(followedUser) ); var userFeed = _streamClient.Feed(FeedGroup.UserFeedType, user.ObjectId); userFeed.UnfollowFeed(FeedGroup.UserFeedType, followedUser.ObjectId); if (activity != null) { _activityRepository.Delete(activity); } }
public Activity BlockUser(JunaUser user, JunaUser blockUser, string time) { var activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_BLOCK) .WithObject(blockUser) .WithTime(DateTime.Parse(time)) .Build(); var blockActivity = _activityRepository.Save(activity); var userFeed = _streamClient.Feed(FeedGroup.UserFeedType, StreamHelper.GetStreamActorId(blockActivity)); var streamActivity = new Stream.Activity(blockActivity.Actor, blockActivity.Verb, blockActivity.Object) { Target = blockActivity.Target, ForeignId = blockActivity.Id.ToString() }; userFeed.AddActivity(streamActivity); return blockActivity; }
public Activity MuteUser(JunaUser user, JunaUser muteUser, Board board, string time) { var activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_MUTE) .WithObject(muteUser) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var muteActivity = _activityRepository.Save(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(muteActivity)); var streamActivity = new Stream.Activity(muteActivity.Actor, muteActivity.Verb, muteActivity.Object) { Target = muteActivity.Target, ForeignId = muteActivity.Id.ToString() }; boardFeed.AddActivity(streamActivity); return muteActivity; }
public Board UserEntersBoard(JunaUser user, string timestamp, Board board) { var activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.BOARD_INTERACTION_ENTER) .WithObject(board) // .WithForeignId(user) //TODO: this is a bug. Upon entering a Board the Object is set as "JunaUser: userObjectId" // it should be Board-BoardId // when .WithForeignId(user) mwthod is called the previous value is overwritten and we are getting object as "JunaUser: userObjectId" .WithTime(DateTime.Parse(timestamp)) .Build(); var enterBoardActivity = _activityRepository.Save(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(enterBoardActivity)); var streamActivity = new Stream.Activity(enterBoardActivity.Actor, enterBoardActivity.Verb, enterBoardActivity.Object) { Target = enterBoardActivity.Target, ForeignId = enterBoardActivity.Id.ToString(), }; boardFeed.AddActivity(streamActivity); if (board.Interactions == null) { board.Interactions = new BoardInteractionMetadata { Likes = 0, Shares = 0, Comments = 0, Followers = 0, Pins = 0, Posts = 0, ActiveUsers = 0 }; } // todo: This is not accurate or thread-safe. Also, multiple entries are counted as multiple users board.Interactions.Followers++; board.Interactions.ActiveUsers++; return(_boardRepository.Upsert(board)); }
public Board UserUnFollowsBoard(JunaUser user, string timestamp, Board board) { var activity = _activityRepository.GetByActorVerbAndObject( actor: $"JunaUser:{user.Id}", verb: InteractionMetadata.INTERACTION_FOLLOW, objectString: $"Board:{board.Id}" ); if (activity != null) { var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(activity)); boardFeed.RemoveActivity(activity.Id.ToString(), true); _activityRepository.Delete(activity); } if (board.Interactions.Followers > 0) { board.Interactions.Followers--; } // todo: This is not accurate or thread-safe. Also, multiple entries are counted as multiple users return(_boardRepository.Upsert(board)); }
public Board UserExitBoard(JunaUser user, string timestamp, Board board) { var activity = _activityRepository.GetByActorVerbAndObject( actor: $"JunaUser:{user.Id}", verb: BoardInteractionMetadata.BOARD_INTERACTION_ENTER, objectString: $"Board:{board.Id}" ); if (activity != null) { var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(activity)); boardFeed.RemoveActivity(activity.Id.ToString(), true); _activityRepository.Delete(activity); } if (board.Interactions.ActiveUsers > 0) { board.Interactions.ActiveUsers--; } return(_boardRepository.Upsert(board)); }
public List <JunaUser> GetAllMembersOfBoard(JunaUser user, Board board) { var memberList = new List <JunaUser>(); if (user != null && board != null) { var creator = board.CreatedBy; memberList.Add(creator); //members that are following var followActivities = _activityRepository.GetByVerbAndObject(BoardInteractionMetadata.INTERACTION_FOLLOW, $"Board-{board.Id}"); foreach (var followActivity in followActivities) { var followerId = followActivity.Actor.Split(new char[] { ':' }, 2)[1]; var follower = _userRepository.GetByObjectId(followerId); if (!memberList.Contains(follower)) { memberList.Add(follower); } } } return(memberList); }
public List <Board> GetBoardsThatUserIsPartOf(JunaUser user) { var selectedBoardsList = new List <Board>(); if (user != null) { var createdBoards = _boardRepository.GetBoardsCreatedByUser(user); selectedBoardsList.AddRange(createdBoards); //boards that user is following var boards = _boardRepository.GetAllBoards(); foreach (var board in boards) { var followActivity = _activityRepository.GetByActorVerbAndObject($"JunaUser:{user.ObjectId}", BoardInteractionMetadata.INTERACTION_FOLLOW, $"Board-{board.Id}"); if (followActivity != null) { var selectedBoard = _boardRepository.GetById(Guid.Parse(followActivity.Object.Split(new char[] { '-' }, 2)[1])); selectedBoardsList.Add(selectedBoard); } } } return(selectedBoardsList); }
public async Task UploadFile( FeedItem feedItem, JunaUser user, string mimeType, System.IO.Stream fileStream, string targetType, Board board, string description) { switch (mimeType) { case ("image/jpeg"): case ("image/png"): case ("image/gif"): case ("image/bmp"): await UploadAndSaveFeedItemAsync(feedItem, FeedItem.ImageFeedItem, fileStream, user, mimeType, targetType, board, description); break; case ("video/mp4"): await UploadAndSaveFeedItemAsync(feedItem, FeedItem.VideoFeedItem, fileStream, user, mimeType, targetType, board, description); break; case ("audio/mpeg"): await UploadAndSaveFeedItemAsync(feedItem, FeedItem.AudioFeedItem, fileStream, user, mimeType, targetType, board, description); break; default: throw new InvalidOperationException("Cannot process this file type"); } }
public void UndoDisLike(FeedItem feedItem, JunaUser user) { if (feedItem != null && user != null) { var activity = _activityRepository.GetByActorVerbAndObject( actor: $"JunaUser:{user.ObjectId}", verb: InteractionMetadata.INTERACTION_DISLIKE, objectString: $"{feedItem.ContentType}:{feedItem.Id}" ); if (activity != null) { var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(activity)); boardFeed.RemoveActivity(activity.Id.ToString(), true); _activityRepository.Delete(activity); } if (feedItem.Interactions.Dislikes > 0) { feedItem.Interactions.Dislikes--; } _feedItemRepository.Upsert(feedItem); } }
public static JunaUser CreateJunaUserThree() { if (JunaUserThree == null) { JunaUserThree = new JunaUser { Id = new Guid("a9532d4d-7308-436f-b647-2ee8e167507f"), ObjectId = new Guid("266889b7-1522-413d-bcd1-fd4e5b5abec2").ToString(), City = "Buenos Aires", Country = "Argentina", DisplayName = "Gabi Harback", EmailAddress = "*****@*****.**", GivenName = "Gabi", IdentityProvider = "", JobTitle = "Physical Therapy Assistant", PostalCode = "3334", StreetAddress = "0602 Aberg Street", Surname = "Harback" }; } return(JunaUserThree); }
public static JunaUser CreateJunaUserOne() { if (JunaUserOne == null) { JunaUserOne = new JunaUser { Id = new Guid("a9f07571-b42d-44ad-a6f4-f7baa766cf31"), ObjectId = new Guid("9ffaeca6-ae17-4d76-bfe1-cc00b0a56fd6").ToString(), City = "Tangquan", Country = "China", DisplayName = "Valeria Cossor", EmailAddress = "*****@*****.**", GivenName = "Valeria", IdentityProvider = "", JobTitle = "Budget/Accounting Analyst IV", PostalCode = "12345", StreetAddress = "283 Caliangt Way", Surname = "Cossor" }; } return(JunaUserOne); }
public static JunaUser CreateJunaUserTwo() { if (JunaUserTwo == null) { JunaUserTwo = new JunaUser { Id = new Guid("cc2a8fb5-bccd-4550-851a-67cdd0cc8adc"), ObjectId = new Guid("c595a4bb-ba61-468a-b7fd-2210cf960eed").ToString(), City = "Bandung", Country = "Indonesia", DisplayName = "Valeria Cossor", EmailAddress = "*****@*****.**", GivenName = "Valeria", IdentityProvider = "", JobTitle = "Nurse Practicioner", PostalCode = "50000", StreetAddress = "9249 Summerview Court", Surname = "Cossor" }; } return(JunaUserTwo); }
public Comment ReplyToComment(Board board, FeedItem feedItem, JunaUser user, string timeStamp, string replyComment, Comment parentComment) { var activity = new CommentBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_COMMENT) .WithObject(feedItem) .WithTarget(board) .WithTime(DateTime.Parse(timeStamp)) .WithParentCommentId(parentComment) .WithMessage(replyComment) .Build(); var replyCommentActivity = _commentsRepository.Save(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(replyCommentActivity)); var streamActivity = new Stream.Activity(replyCommentActivity.Actor, replyCommentActivity.Verb, replyCommentActivity.Object) { Target = replyCommentActivity.Target, ForeignId = replyCommentActivity.Id.ToString(), }; streamActivity.SetData("Message", replyCommentActivity.Message); boardFeed.AddActivity(streamActivity); // Move this to a database trigger or a change feed processor if (feedItem.Interactions == null) { feedItem.Interactions = new InteractionMetadata { Likes = 0, Shares = 0, Pins = 0, Comments = 0 } } ; feedItem.Interactions.Comments++; _feedItemRepository.Upsert(feedItem); return(replyCommentActivity); }
public JunaUser CreateNewOrGetExistingUser( string email, string displayName, string country, string identityProvider, string city, string givenName, string postalCode, string jobTitle, string streetAddress, string surname, string userObjectID) { JunaUser junaUserCreated = _junaUserRepository.GetByObjectId(userObjectID); if (junaUserCreated == null) { junaUserCreated = _junaUserRepository.Save(new JunaUser { Id = Guid.NewGuid(), EmailAddress = email, ObjectId = userObjectID, DisplayName = displayName, Country = country, IdentityProvider = identityProvider, City = city, GivenName = givenName, PostalCode = postalCode, JobTitle = jobTitle, StreetAddress = streetAddress, Surname = surname }); } return(junaUserCreated); }
public void LikeFeedItem(FeedItem feedItem, JunaUser user, string target, string targetId, string time) { var activity = new Activity(); switch (target) { case "Board": var board = _boardRepository.GetById(Guid.Parse(targetId)); if (board == null) { break; } activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_LIKE) .WithObject(feedItem) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var boardActivity = StoreUniqueActivity(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(activity)); var streamActivity = new Stream.Activity(boardActivity.Actor, boardActivity.Verb, boardActivity.Object) { Target = boardActivity.Target, ForeignId = boardActivity.Id.ToString(), }; boardFeed.AddActivity(streamActivity); //delete the dislike activity if user has one var dislikeActivity = _activityRepository.GetByActorVerbObjectandTarget( actor: ActivityHelper.GetActor(user), verb: InteractionMetadata.INTERACTION_DISLIKE, objectString: ActivityHelper.GetObject(feedItem), target: ActivityHelper.GetTarget(board)); if (dislikeActivity != null) { UndoDisLike(feedItem, user); } break; case "user": activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_LIKE) .WithObject(feedItem) .WithTime(DateTime.Parse(time)) .Build(); var userActivity = StoreUniqueActivity(activity); var userFeed = _streamClient.Feed(FeedGroup.UserFeedType, StreamHelper.GetStreamActorId(activity)); streamActivity = new Stream.Activity(userActivity.Actor, userActivity.Verb, userActivity.Object) { Target = userActivity.Target, ForeignId = userActivity.Id.ToString(), }; userFeed.AddActivity(streamActivity); break; case "Card": //Not implemented yet break; default: break; } // Move this to a database trigger or a change feed processor if (feedItem.Interactions == null) { feedItem.Interactions = new InteractionMetadata { Likes = 0, Shares = 0, Pins = 0 } } ; feedItem.Interactions.Likes++; _feedItemRepository.Upsert(feedItem); }
public void PinFeedItem(FeedItem feedItem, JunaUser user, string target, string targetId, string time) { var activity = new Activity(); switch (target) { case "Board": var board = _boardRepository.GetById(Guid.Parse(targetId)); if (board == null) { break; } activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_PIN) .WithObject(feedItem) .WithTarget(board) .WithTime(DateTime.Parse(time)) .Build(); var pinActivity = StoreUniqueActivity(activity); var boardFeed = _streamClient.Feed(FeedGroup.BoardFeedType, StreamHelper.GetStreamActorId(pinActivity)); var streamActivity = new Stream.Activity(pinActivity.Actor, pinActivity.Verb, pinActivity.Object) { Target = pinActivity.Target, ForeignId = pinActivity.Id.ToString() }; boardFeed.AddActivity(streamActivity); break; case "user": var targetUser = _junaUserRepository.GetByObjectId(targetId); if (targetUser == null) { break; } activity = new ActivityBuilder() .WithActor(user) .WithVerb(BoardInteractionMetadata.INTERACTION_PIN) .WithObject(feedItem) .WithTarget(targetUser) .WithTime(DateTime.Parse(time)) .Build(); var userPinActivity = StoreUniqueActivity(activity); var userFeed = _streamClient.Feed(FeedGroup.UserFeedType, StreamHelper.GetStreamActorId(userPinActivity)); var streamPinActivity = new Stream.Activity(userPinActivity.Actor, userPinActivity.Verb, userPinActivity.Object) { Target = userPinActivity.Target, ForeignId = userPinActivity.Id.ToString() }; userFeed.AddActivity(streamPinActivity); break; case "Card": //to be implemented break; default: break; } if (feedItem.Interactions == null) { feedItem.Interactions = new InteractionMetadata { Likes = 0, Shares = 0, Pins = 0 } } ; feedItem.Interactions.Pins++; _feedItemRepository.Upsert(feedItem); }
public static string GetObject(JunaUser user) => GetJunaUserStreamString(user);
public static string GetActor(JunaUser user) => GetJunaUserStreamString(user);
public async Task SendFcmUserNotification(JunaNotification junaNotification, JunaUser user, string operationType) { await SendFcmNotificationToTopic(junaNotification, $"JunaUser-{user.ObjectId}", operationType); }
private static string GetJunaUserStreamString(JunaUser user) => $"JunaUser:{user.ObjectId}";