/// <summary>
        /// This method is used to create the list of recommended posts on the user timeline.
        /// </summary>
        /// <param name="currentuser">Logged in user details</param>
        /// <param name="usersPersonalDetails">Users personal details</param>
        /// <param name="usersTradingDetails">Users trading details</param>
        /// <returns>Creates and returns a recommended user list</returns>
        private static List <UsersTimeLinePost> GetUserTimelineRecommendedPosts(LetsTradingDetails currentuser, List <RegisterUserViewModel> usersPersonalDetails, List <LetsTradingDetails> usersTradingDetails)
        {
            var currentUser = currentuser;

            var userList          = new List <LetsUser>();
            var timelinePostsList = new List <UsersTimeLinePost>();

            //Building a list that contains all the users personal details and trading details
            foreach (var userPersonalDetails in usersPersonalDetails)
            {
                var userTradingDetails = usersTradingDetails.Find(item => item.Id.Equals(userPersonalDetails.Id));
                var letsUser           = new LetsUser
                {
                    UserPersonalDetails = userPersonalDetails,
                    UserTradingDetails  = userTradingDetails
                };
                userList.Add(letsUser);
            }

            foreach (var user in userList)
            {
                if (user.UserTradingDetails.Requests != null)
                {
                    foreach (var request in user.UserTradingDetails.Requests)
                    {
                        if (string.IsNullOrEmpty(request.IsAssignedTo) && !request.HasDeleted)
                        {
                            foreach (var tag in request.Tags)
                            {
                                if (currentUser.Skills.Contains(tag))
                                {
                                    var timelinePost = new UsersTimeLinePost
                                    {
                                        ImageId   = user.UserPersonalDetails.Account.ImageId,
                                        UserName  = user.UserPersonalDetails.Account.UserName,
                                        FirstName = user.UserPersonalDetails.About.FirstName,
                                        LastName  = user.UserPersonalDetails.About.LastName,
                                        Request   = request
                                    };

                                    if (!timelinePostsList.Contains(timelinePost))
                                    {
                                        timelinePostsList.Add(timelinePost);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            timelinePostsList = timelinePostsList.OrderBy(post => post.Request.Date).ToList();
            return(timelinePostsList);
        }
        public async Task <ActionResult> PostRequest(string title, string description, int budget, string tags)
        {
            var username = User.Identity.Name;

            var userByUsername = await DatabaseContext.RegisteredUsers.Find(new BsonDocument {
                { "Account.UserName", username }
            }).ToListAsync();

            var userTradingDetails = await DatabaseContext.LetsTradingDetails.Find(new BsonDocument {
                { "_id", userByUsername[0].Id }
            }).ToListAsync();

            if (userTradingDetails[0].Credit > 0)
            {
                userTradingDetails[0].Request = new RequestPost();

                if (userTradingDetails[0].Requests == null)
                {
                    userTradingDetails[0].Requests = new List <RequestPost>();
                }

                userTradingDetails[0].Request.Id           = userTradingDetails[0].Requests.Count();
                userTradingDetails[0].Request.HasDeleted   = false;
                userTradingDetails[0].Request.HasCompleted = false;
                userTradingDetails[0].Request.JobCompleted = false;
                userTradingDetails[0].Request.Date         = DateTime.Now;
                userTradingDetails[0].Request.Description  = description;
                userTradingDetails[0].Request.Title        = title;
                userTradingDetails[0].Request.Budget       = budget;

                var tagArray = tags.Split(',');
                var tagList  = new List <string>(tagArray.Length);
                tagList.AddRange(tagArray);
                tagList.Reverse();

                userTradingDetails[0].Request.Tags = tagList;
                userTradingDetails[0].Requests.Add(userTradingDetails[0].Request);

                await DatabaseContext.LetsTradingDetails.ReplaceOneAsync(r => r.Id == userTradingDetails[0].Id, userTradingDetails[0]);

                var letsUser = new LetsUser
                {
                    UserPersonalDetails = userByUsername[0],
                    UserTradingDetails  = userTradingDetails[0]
                };

                return(View("NewPostedRequest", letsUser));
            }
            else
            {
                return(null);
            }
        }
        public async Task <ActionResult> UserProfile()
        {
            var username       = User.Identity.Name;
            var userByUsername = await DatabaseContext.RegisteredUsers.Find(new BsonDocument {
                { "Account.UserName", username }
            }).ToListAsync();

            var userTradingDetails = await DatabaseContext.LetsTradingDetails.Find(new BsonDocument {
                { "_id", userByUsername[0].Id }
            }).ToListAsync();

            var letsUser = new LetsUser
            {
                UserPersonalDetails = userByUsername[0],
                UserTradingDetails  = userTradingDetails[0]
            };

            return(View(letsUser));
        }