Exemplo n.º 1
0
 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;
        }
Exemplo n.º 3
0
        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);
     }
 }
Exemplo n.º 10
0
        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;
 }
Exemplo n.º 13
0
        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));
        }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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");
            }
        }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        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);
        }
Exemplo n.º 26
0
        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);
        }
Exemplo n.º 27
0
 public static string GetObject(JunaUser user) => GetJunaUserStreamString(user);
Exemplo n.º 28
0
 public static string GetActor(JunaUser user) => GetJunaUserStreamString(user);
Exemplo n.º 29
0
 public async Task SendFcmUserNotification(JunaNotification junaNotification, JunaUser user, string operationType)
 {
     await SendFcmNotificationToTopic(junaNotification, $"JunaUser-{user.ObjectId}", operationType);
 }
Exemplo n.º 30
0
 private static string GetJunaUserStreamString(JunaUser user) => $"JunaUser:{user.ObjectId}";