public async Task <IHttpActionResult> OpinionOnProduct([FromUri] int ProductId)
        {
            var ProductPosts = PostAuxiliar.PostsByProduct(ProductId);
            var Product      = SQLContext.Products.Find(ProductId);

            double Opinion = 0;

            foreach (var Post in ProductPosts)
            {
                var Response = await MakeRequest(Post.Text.Replace("$", "")).ConfigureAwait(false);

                var Analysis = (Response as JArray).ToObject <List <SentimentalAnalysis> >();

                Opinion += CalculateMeanScore(new List <string>()
                {
                    Product.Name,
                    Product.Description,
                    Product.Pro.Firstname,
                    Product.Pro.Lastname,
                    Product.Pro.Nickname
                }, Analysis);
            }

            return(Ok(new { Product = Product.Name, Score = Opinion, Opinion = ScoreTranslator(Opinion) }));
        }
Exemple #2
0
        public IHttpActionResult RecommendedPosts([FromUri] string AccessToken)
        {
            var UserId = TokenValidator.VerifyToken(AccessToken);

            var UserFollows = UserAuxiliar
                              .Follows(UserId, SQLContext)
                              .Select(x => x.Id);

            var UserTopics = UserAuxiliar.FollowedSubjects(UserId, SQLContext);

            var UserPosts        = PostAuxiliar.PostsByAuthor(UserId);
            var UserMentionPosts = PostAuxiliar.MentionsUser(UserId, SQLContext);

            var FollowsPosts        = PostAuxiliar.PostsByAuthors(UserFollows);
            var FollowsMentionPosts = PostAuxiliar.MentionsUsers(UserFollows);

            var TopicsPosts = PostAuxiliar.PostsBySubjects(UserTopics.Select(x => x.Id));

            var PostComparer = new PostComparer();

            var RecommendedPosts = UserPosts
                                   .Union(UserMentionPosts, PostComparer)
                                   .Union(FollowsPosts, PostComparer)
                                   .Union(FollowsMentionPosts, PostComparer)
                                   .Union(TopicsPosts, PostComparer)
                                   .ToList();

            RecommendedPosts = PostAuxiliar.UpdateOwner(RecommendedPosts, SQLContext);
            RecommendedPosts = GraphAuxiliar.OrderPostsByAffinity(UserId, RecommendedPosts, SQLContext);

            return(Ok(RecommendedPosts));
        }
Exemple #3
0
        public IHttpActionResult Dislike([FromUri] string AccessToken, [FromUri] string PostId)
        {
            var UserId = TokenValidator.VerifyToken(AccessToken);

            var PostDisliked = PostAuxiliar.PostById(PostId);

            if (PostDisliked.Dislikes.Contains(UserId))
            {
                PostDisliked.Dislikes.Remove(UserId);
            }
            else
            {
                PostDisliked.Dislikes.Add(UserId);
            }

            if (PostDisliked.Likes.Contains(UserId))
            {
                PostDisliked.Likes.Remove(UserId);
            }

            var Update = Builders <Post> .Update
                         .Set("Likes", PostDisliked.Likes)
                         .Set("Dislikes", PostDisliked.Dislikes);

            PostAuxiliar.UpdatePostById(PostDisliked.Id, Update);

            int TotalLikes    = PostDisliked.Likes.Count;
            int TotalDeslikes = PostDisliked.Dislikes.Count;

            dynamic Response = new { TotalLikes, TotalDeslikes };

            return(Ok(Response));
        }
Exemple #4
0
        public IHttpActionResult PostComments([FromUri] string PostId)
        {
            var Comments = PostAuxiliar.PostComments(PostId);

            Comments = PostAuxiliar.UpdateOwner(Comments, SQLContext);

            return(Ok(Comments));
        }
Exemple #5
0
        public IHttpActionResult PostsByProduct([FromUri] int ProductId)
        {
            var Posts = PostAuxiliar.PostsByProduct(ProductId);

            Posts = PostAuxiliar.UpdateOwner(Posts, SQLContext);

            return(Ok(Posts));
        }
Exemple #6
0
        public IHttpActionResult PostById([FromUri] string PostId)
        {
            var Post = PostAuxiliar.PostById(PostId);

            Post = PostAuxiliar.UpdateOwner(Post, SQLContext);

            return(Ok(Post));
        }
Exemple #7
0
        private void UpdateParent(Post Parent, ObjectId CommentId)
        {
            var NewComments = new List <ObjectId>(Parent.Comments)
            {
                CommentId
            };

            var Update = Builders <Post> .Update.Set("Comments", NewComments);

            PostAuxiliar.UpdatePostById(Parent.Id, Update);
        }
Exemple #8
0
        public IHttpActionResult PostsByUser([FromUri] int UserId)
        {
            var Posts = PostAuxiliar.PostsByAuthor(UserId);

            Posts = PostAuxiliar.UpdateOwner(Posts, SQLContext);

            var MentionsPosts = PostAuxiliar.MentionsUser(UserId, SQLContext);

            var Response = Posts.Union(MentionsPosts, new PostComparer()).ToList();

            return(Ok(Response));
        }
Exemple #9
0
        public IHttpActionResult CreatePost([FromBody] Post NewPost, [FromUri] string AccessToken)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var UserId = TokenValidator.VerifyToken(AccessToken);

            NewPost.UserId = UserId;

            NewPost = PostAuxiliar.UpdateOwner(NewPost, SQLContext);

            NewPost = TreatPostAddons(NewPost);

            NoSQLContext.PostCollection.InsertOne(NewPost);

            Post Parent = default;

            if (NewPost.Parent != null)
            {
                Parent = FindParent(NewPost);

                if (Parent != default)
                {
                    UpdateParent(Parent, NewPost.Id);
                }
            }

            GraphAuxiliar.IncreaseFollowAffinity(NewPost.UserId, NewPost.Mentions, SQLContext);
            GraphAuxiliar.IncreaseTopicAffinity(NewPost.UserId, NewPost.Hashtags, SQLContext);

            if (Parent != default)
            {
                GraphAuxiliar.IncreaseFollowAffinity(NewPost.UserId, Parent.UserId, SQLContext);
                GraphAuxiliar.IncreaseFollowAffinity(NewPost.UserId, Parent.Mentions, SQLContext);
                GraphAuxiliar.IncreaseTopicAffinity(NewPost.UserId, Parent.Hashtags, SQLContext);
            }

            return(Ok(NewPost));
        }
        public async Task <IHttpActionResult> OpinionOnSubject([FromUri] int SubjectId)
        {
            var Subject      = SQLContext.Subjects.Find(SubjectId);
            var SubjectPosts = PostAuxiliar.PostsBySubject(SubjectId);

            double Opinion = 0;

            foreach (var Post in SubjectPosts)
            {
                var Response = await MakeRequest(Post.Text.Replace("#", "")).ConfigureAwait(false);

                var Analysis = (Response as JArray).ToObject <List <SentimentalAnalysis> >();

                Opinion += CalculateMeanScore(new List <string>()
                {
                    Subject.Hashtag.Replace("#", "")
                }, Analysis);
            }

            return(Ok(new { Topic = Subject.Hashtag, Score = Opinion, Opinion = ScoreTranslator(Opinion) }));
        }
Exemple #11
0
        private Post FindParent(Post NewPost)
        {
            var ParentPost = PostAuxiliar.PostById(NewPost.Parent);

            return(ParentPost);
        }