示例#1
0
        /**/

        /*
         * NAME:
         *      GenerateUserActivity - generates UserActivity objects for the given user
         * SYNOPSIS:
         *      GenerateUserActivity(string userId)
         *           userId --> the id of the user whose activities are to be generated
         * DESCRIPTION:
         *      This function goes through the database and extracts all the TaskComment, TaskUpdate, and TaskUserUpdate entries
         *          associated with the given user, and it interprests those entries to generate descriptions of all the user's activites
         *          in the form of a list of UserActivity objects
         * RETURNS
         *      a List of the UserActivity objects associated with the user
         * AUTHOR
         *      Biplab Thapa Magar
         * DATE
         *      10/04/2020
         * /
         * /**/
        public List <UserActivity> GenerateUserActivity(string userId)
        {
            //get the user's name
            string userFullName = GetUserFullName(userId);

            var userComments        = _usersRepo.GetCommentsByUser(userId);
            var userTaskUpdates     = _usersRepo.GetTaskUpdatesByUpdater(userId);
            var userTaskUserUpdates = _usersRepo.GetTaskUserUpdatesByUpdater(userId);

            //add comment activity
            var    userActivities = new List <UserActivity>();
            string activity       = new string("");

            //loop through all the user comments and make UserActivity objects out of them
            for (int i = 0; i < userComments.Count; i++)
            {
                activity = userFullName + " commented on " + GetTaskNameById(userComments[i].TaskId) + ":   " + userComments[i].Comment;
                //create userActivity object
                userActivities.Add(new UserActivity {
                    Activity  = activity,
                    ProjectId = _tasksRepo.GetTaskById(userComments[i].TaskId).ProjectId,
                    TaskId    = userComments[i].TaskId,
                    Time      = userComments[i].TimeAdded
                });
            }

            //add task update activity
            List <string> updated;

            //loop through all the task updates by the user
            for (int i = 0; i < userTaskUpdates.Count; i++)
            {
                updated = GetUpdatedAttributeAndValue(userTaskUpdates[i]);
                if (updated == null)
                {
                    activity = userFullName + " created a new task: " + GetTaskNameById(userTaskUpdates[i].TaskId);
                }
                else
                {
                    activity = userFullName + " changed the " + updated[0] + " for " +
                               GetTaskNameById(userTaskUpdates[i].TaskId) + " to " + updated[1];
                }


                //create userActivity object
                userActivities.Add(new UserActivity {
                    Activity  = activity,
                    ProjectId = _tasksRepo.GetTaskById(userTaskUpdates[i].TaskId).ProjectId,
                    TaskId    = userTaskUpdates[i].TaskId,
                    Time      = userTaskUpdates[i].TimeStamp
                });
            }

            //add task user update activity
            for (int i = 0; i < userTaskUserUpdates.Count; i++)
            {
                //if the task user update is about user being added to task

                if (userTaskUserUpdates[i].TimeAdded != null)
                {
                    activity = userFullName + " assigned " + GetUserFullName(userTaskUserUpdates[i].AppUserId)
                               + " to " + GetTaskNameById(userTaskUserUpdates[i].TaskId);
                    //create userActivity object
                    userActivities.Add(new UserActivity {
                        Activity  = activity,
                        ProjectId = _tasksRepo.GetTaskById(userTaskUpdates[i].TaskId).ProjectId,
                        TaskId    = userTaskUserUpdates[i].TaskId,
                        Time      = (DateTime)userTaskUserUpdates[i].TimeAdded
                    });
                }
                else
                {
                    activity = userFullName + " unassigned " + GetUserFullName(userTaskUserUpdates[i].AppUserId)
                               + " from " + GetTaskNameById(userTaskUserUpdates[i].TaskId);
                    //create userActivity object
                    userActivities.Add(new UserActivity {
                        Activity  = activity,
                        ProjectId = _tasksRepo.GetTaskById(userTaskUpdates[i].TaskId).ProjectId,
                        TaskId    = userTaskUserUpdates[i].TaskId,
                        Time      = (DateTime)userTaskUserUpdates[i].TimeRemoved
                    });
                }
            }

            //now sort the list of user activity by date
            userActivities.Sort((activity1, activity2) => DateTime.Compare(activity2.Time, activity1.Time));
            return(userActivities);
        }