コード例 #1
0
        public JsonResult TagSearch(int[] data)
        {
            // Last element of data contains configuration instead of tags, tread carefully!
            int configuration = data[data.Length - 1];

            int[] tags = new int[data.Length - 1];
            Array.Copy(data, tags, data.Length - 1);
            if (tags.Length <= 0)
            {
                return(null);
            }

            TagSearchConfiguration tagSearchConfig = (TagSearchConfiguration)configuration;

            return(Json(_genericService.GetUserFromTagsAsString(User.Identity.Name, tags, tagSearchConfig, tags.Length)));
        }
コード例 #2
0
        public string GetUserFromTagsAsString(string username, IEnumerable <int> tagIds, TagSearchConfiguration tagSearchConfig, int tagsCount)
        {
            var userList    = new List <TagSearchResult>();
            var uniqueUsers = new Dictionary <int, int>();

            using (var unitOfWork = new UnitOfWork())
            {
                var tagMap         = unitOfWork.TagRepository.Get(_ => true).ToDictionary(x => x.Id, x => x);
                var userProfile    = unitOfWork.UserProfileRepository.Get(entity => entity.UserName == username).FirstOrDefault();
                var requestedUsers = unitOfWork.RequestRepository.Get(entity => entity.From.Id == userProfile.Id).Where(x => x.To != null).Select(x => x.To.Id).ToList();
                foreach (var id in tagIds)
                {
                    Tag tag;
                    if (tagMap.TryGetValue(id, out tag))
                    {
                        foreach (UserExtendedProfile user in tag.Users)
                        {
                            if (!uniqueUsers.ContainsKey(user.UserProfile.Id) && userProfile.Id != user.UserProfile.Id)
                            {
                                userList.Add(new TagSearchResult(user.UserProfile.Id, user.UserProfile.UserName,
                                                                 user.ImageUrl, requestSent: requestedUsers.Contains(user.UserProfile.Id)));
                                uniqueUsers[user.UserProfile.Id] = 1;
                            }
                            else
                            {
                                if (uniqueUsers.ContainsKey(user.UserProfile.Id))
                                {
                                    uniqueUsers[user.UserProfile.Id]++;
                                }
                            }
                        }
                    }
                }
            }
            if (tagSearchConfig == TagSearchConfiguration.Intersection)
            {
                // Intersection
                return(new JavaScriptSerializer().Serialize(userList.Where(x => uniqueUsers[x.ProfileId] == tagsCount)));
            }

            // Union
            return(new JavaScriptSerializer().Serialize(userList));
        }