public async Task <bool> AddUpVoteToPostAsync(string postId, ClaimsPrincipal user) { var dbPost = await this.redditCloneUnitOfWork.Posts.GetByIdAsync(postId); if (dbPost == null) { return(false); } var dbUserId = this.userManager.GetUserId(user); var dbVotePost = await this.redditCloneUnitOfWork.VotePostRepository .GetByUserIdAsync(dbUserId, postId); if (dbVotePost == null) { dbVotePost = this.CreatePost(dbUserId, postId); this.redditCloneUnitOfWork.VotePostRepository.Add(dbVotePost); } else if (dbVotePost.Value > 0) { return(false); } else { dbPost.DownVotesCount--; } dbVotePost.Value = 1; dbPost.UpVotesCount++; var rowsAffected = await this.redditCloneUnitOfWork.CompleteAsync(); return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected)); }
public async Task <bool> AddResponseToCommentAsync(ClaimsPrincipal user, CommentBindingModel model) { var dbComment = await this.unitOfWork.Comments.GetByIdAsync(model.SourceId); if (dbComment == null) { return(false); } var dbUserId = this.userManager.GetUserId(user); var dbReply = this.commentMapper.MapComment(dbComment.PostId, model.Description, dbUserId); dbComment.Replies.Add(dbReply); var rowsAffected = await unitOfWork.CompleteAsync(); return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected)); }
public async Task <bool> CreatePostAsync(ClaimsPrincipal user, PostCreationBindingModel model) { var dbSubreddit = await this.redditCloneUnitOfWork.Subreddits .GetByIdAsync(model.SelectedSubredditId); if (dbSubreddit == null) { return(false); } var dbUserId = this.userManager.GetUserId(user); var dbPost = this.postMapper.MapPost(model, dbUserId); redditCloneUnitOfWork.Posts.Add(dbPost); var rowsAffected = await redditCloneUnitOfWork.CompleteAsync(); return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected)); }
public async Task <bool> CreateSubredditAsync(SubredditCreationBindingModel model, ClaimsPrincipal user) { var subredditsWithName = await this.redditCloneUnitOfWork.Subreddits.FindAsync(s => s.Name == model.Name); if (subredditsWithName.Count() > 0) { return(false); } var dbSubreddit = this.mapper.Map <Subreddit>(model); var dbUserId = this.userManager.GetUserId(user); dbSubreddit.AuthorId = dbUserId; this.redditCloneUnitOfWork.Subreddits.Add(dbSubreddit); int rowsAffected = await this.redditCloneUnitOfWork.CompleteAsync(); return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected)); }
public async Task <bool> RemoveUpVoteToPostAsync(string postId, ClaimsPrincipal user) { var dbPost = await this.redditCloneUnitOfWork.Posts.GetByIdAsync(postId); if (dbPost == null) { return(false); } var dbUserId = this.userManager.GetUserId(user); var dbVotePost = await this.redditCloneUnitOfWork.VotePostRepository .GetByUserIdAsync(dbUserId, postId); if (this.IsUpVoteValid(dbVotePost) == false) { return(false); } dbPost.UpVotesCount--; this.redditCloneUnitOfWork.VotePostRepository.Remove(dbVotePost); var rowsAffected = await this.redditCloneUnitOfWork.CompleteAsync(); return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected)); }