예제 #1
0
        public async Task <IActionResult> Delete(VoteModel model)
        {
            try
            {
                var user = await GetCurrentUser();

                Vote vote;
                if (model.Id != 0)
                {
                    vote = await _voteService.GetVote(model.Id);
                }
                else
                {
                    vote = await _voteService.GetUserVoteForArticle(user.Id, model.ArticleId, model.VoteType);
                }

                if (vote == null)
                {
                    _logger.LogInformation("Vote not found");
                    return(NotFound("Vote not found"));
                }

                _dbContext.Votes.Remove(vote);
                await _dbContext.SaveChangesAsync();

                await _voteService.UpdateArticleScore(model.ArticleId);

                var artVoteCount = await GetVoteCountForArticle(model.ArticleId, model.VoteType);

                var score = (await _dbContext.Articles.FindAsync(model.ArticleId))?.Score;

                var voteResultModel = new
                {
                    model.ArticleId,
                    model.VoteType,
                    VoteCount = artVoteCount,
                    Score     = score
                };

                return(Ok(voteResultModel));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error deleting vote", model);

                return(StatusCode((int)HttpStatusCode.InternalServerError, "Error deleting vote"));
            }
        }