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) })); }
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)); }
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)); }
public IHttpActionResult PostComments([FromUri] string PostId) { var Comments = PostAuxiliar.PostComments(PostId); Comments = PostAuxiliar.UpdateOwner(Comments, SQLContext); return(Ok(Comments)); }
public IHttpActionResult PostsByProduct([FromUri] int ProductId) { var Posts = PostAuxiliar.PostsByProduct(ProductId); Posts = PostAuxiliar.UpdateOwner(Posts, SQLContext); return(Ok(Posts)); }
public IHttpActionResult PostById([FromUri] string PostId) { var Post = PostAuxiliar.PostById(PostId); Post = PostAuxiliar.UpdateOwner(Post, SQLContext); return(Ok(Post)); }
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); }
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)); }
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) })); }
private Post FindParent(Post NewPost) { var ParentPost = PostAuxiliar.PostById(NewPost.Parent); return(ParentPost); }