Exemplo n.º 1
0
        public async Task LikeFeed(ApplicationUser user, Guid refId, int likeType)
        {
            if (likeType != 1 && likeType != 2)
            {
                throw new BusinessException("WrongLikeType", "Yanlış beğenme tipi.");
            }

            var feed = _feedRepository.GetFeedAsync(refId);

            if (feed == null)
            {
                throw new BusinessException("FeedNotFound", "Kayıt bulunamadı.");
            }

            var like = await _feedRepository.GetFeedLikedDislikedAsync(refId, user.Id);

            if (like == null)
            {
                like          = new Like();
                like.RefId    = refId;
                like.UserId   = user.Id;
                like.LikeType = likeType;
                like.Date     = DateTime.UtcNow;

                await _feedRepository.SaveLikeAsync(like);

                if (likeType == 1)
                {
                    await _feedRepository.ChangeLikeCountAsync(refId, 1);
                }
                else
                {
                    await _feedRepository.ChangeDislikeCountAsync(refId, 1);
                }
            }
            else
            {
                if (like.LikeType == likeType)
                {
                    return;
                }

                like.LikeType = likeType;

                if (likeType == 1)
                {
                    await _feedRepository.ChangeLikeCountAsync(refId, 1);

                    await _feedRepository.ChangeDislikeCountAsync(refId, -1);
                }
                else
                {
                    await _feedRepository.ChangeLikeCountAsync(refId, -1);

                    await _feedRepository.ChangeDislikeCountAsync(refId, 1);
                }

                _feedRepository.UpdateLike(like);
            }

            await _unitOfWork.CompleteAsync();
        }