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); } }
public async Task <IActionResult> IssueDetailsLike([FromBody] IssueDetailsLikeFormModel issueDetailsLike) { var resp = await _issueService.IssueDetailsLikeAsync(HttpContext.GetUser(), issueDetailsLike); return(Ok(GetRequestResult(resp))); }