public async Task <long> IssueDetailsLikeAsync(User user, IssueDetailsLikeFormModel issueDetailsLike)
        {
            try
            {
                var issueDetail = await _context.IssueDetails.Include(c => c.IssueDetailLikes).FirstOrDefaultAsync(c => c.Id == issueDetailsLike.IssueDetailId);

                if (issueDetail is null)
                {
                    throw new ExperienceManagementGlobalException(IssueServiceErrors.IssueDetailNotFoundError);
                }
                if (issueDetail.UserId != user.Id)
                {
                    if (issueDetail.IssueDetailLikes != null && issueDetail.IssueDetailLikes.Count > 0)
                    {
                        var userLike = issueDetail.IssueDetailLikes.FirstOrDefault();
                        if (userLike.IsLike != issueDetailsLike.IsLike)
                        {
                            if (issueDetailsLike.IsLike == false)
                            {
                                issueDetail.Likes = issueDetail.Likes - 1;
                            }
                            else
                            {
                                issueDetail.Likes = issueDetail.Likes + 1;
                            }
                            userLike.IsLike = issueDetailsLike.IsLike;
                            _context.IssueDetailLikes.Update(userLike);
                        }
                    }
                    else
                    {
                        var userLike = new IssueDetailLike()
                        {
                            IsLike      = issueDetailsLike.IsLike,
                            UserId      = user.Id,
                            IssueDetail = issueDetail
                        };
                        await _context.IssueDetailLikes.AddAsync(userLike);

                        if (issueDetailsLike.IsLike)
                        {
                            issueDetail.Likes = issueDetail.Likes + 1;
                        }
                        else
                        {
                            issueDetail.Likes = issueDetail.Likes - 1;
                        }
                    }
                    _context.IssueDetails.Update(issueDetail);
                    await _context.SaveChangesAsync();
                }
                return(issueDetail.Likes);
            }
            catch (Exception ex)
            {
                throw new ExperienceManagementGlobalException(IssueServiceErrors.ChangeLikeIssueError, ex);
            }
        }
예제 #2
0
        public async Task <IActionResult> IssueDetailsLike([FromBody] IssueDetailsLikeFormModel issueDetailsLike)
        {
            var resp = await _issueService.IssueDetailsLikeAsync(HttpContext.GetUser(), issueDetailsLike);

            return(Ok(GetRequestResult(resp)));
        }