Example #1
0
        public async Task ToggleLikeAsync(AddLikeDto addLikeDto, UserAndOrganizationDto userOrg)
        {
            await _postDeleteLock.WaitAsync();

            try
            {
                var post = await _postsDbSet
                           .Include(x => x.Wall)
                           .FirstOrDefaultAsync(x => x.Id == addLikeDto.Id && x.Wall.OrganizationId == userOrg.OrganizationId);

                if (post == null)
                {
                    throw new ValidationException(ErrorCodes.ContentDoesNotExist, "Post does not exist");
                }

                var like = post.Likes.FirstOrDefault(x => x.UserId == userOrg.UserId);
                if (like == null)
                {
                    post.Likes.Add(new Like(userOrg.UserId, addLikeDto.Type));
                }
                else
                {
                    post.Likes.Remove(like);
                }

                await _uow.SaveChangesAsync(userOrg.UserId);
            }
            finally
            {
                _postDeleteLock.Release();
            }
        }
Example #2
0
        public async Task <CommandResult> AddLike(AddLikeDto addLikeDto)
        {
            if (addLikeDto is null)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.ADD.NULL",
                    Message = "Please send valid information",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }
            var(login, user) = await _userDataManager.AddCurrentUserIfNeeded();

            if (user?.UserId is null)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.ADD.UNAUTHORIZED",
                    Message = "You are not authorized to execute this request",
                    StatusCode = System.Net.HttpStatusCode.Unauthorized,
                }));
            }

            var @object = _objectsRepo.Get(addLikeDto.ObjectId);

            if (@object is null || @object.ObjectStatus != ObjectStatus.Available)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.ADD.UNAVAILABLE",
                    Message = "This object is unavailable",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }

            var previousLikes = _likesRepo.Table.Where(ol => ol.Login.UserId == user.UserId && ol.ObjectId == addLikeDto.ObjectId).ToList();

            if (!previousLikes.IsNullOrEmpty())
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.ADD.ALREADY.LIKED",
                    Message = "You already liked this object",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }

            _likesRepo.Add(new ObjectLike
            {
                LikedAtUtc   = DateTime.UtcNow,
                ObjectLikeId = Guid.NewGuid(),
                LoginId      = login.LoginId,
                ObjectId     = addLikeDto.ObjectId
            });

            await _likesRepo.SaveChangesAsync();

            return(new CommandResult());
        }
        public static Likes AddLikeDTOtoLike(AddLikeDto like, Likes addLike)
        {
            addLike.UserId      = like.UserId;
            addLike.PostId      = like.PostId;
            addLike.DateCreated = DateTime.Now;

            return(addLike);
        }
Example #4
0
        public async Task <IActionResult> RemoveLike([FromBody] AddLikeDto removeLikeDto)
        {
            var result = await _likeService.Unlike(removeLikeDto);

            return(StatusCode(result, new
            {
                Message = "Like has been removed."
            }));
        }
Example #5
0
        public async Task <IActionResult> AddLike([FromBody] AddLikeDto addLikeDto)
        {
            var result = await _likeAdder.AddLike(addLikeDto);

            return(StatusCode(result, new
            {
                Message = "Like has been added."
            }));
        }
Example #6
0
        public IActionResult LikeComment(int id)
        {
            // if (_user != null)
            // {


            //     if (!like.Any(l => l.LikedById == _user.Id) && comment.AvatarId == id)
            //     {
            //         addLike.CommentId = id;
            //         addLike.LikedById = _user.Id;
            //         var mappedLike = _mapper.Map<LikeEntity>(addLike);
            //         if (await _ctx.AddOrRemoveLike(mappedLike))
            //         {
            //             return Ok($"Comment: {id} was liked by {_user.Name}");
            //         }
            //         return BadRequest($"Comment: {id} has already been liked by {_user.Name}.");
            //     }

            //     return BadRequest($"No like was added to comment: {id}.");
            // }
            // return NotFound("No User has Logged in.");

            if (_user != null)
            {
                var addLike = new AddLikeDto();
                var comment = _ctx.GetCommentById(id);
                if (comment == null)
                {
                    NotFound($"No comment has been found with id {id}");
                }
                var like = comment.Likes.ToList();
                if (!like.Any(v => v.LikedById == _user.Id))
                {
                    addLike.CommentId = id;
                    addLike.LikedById = _user.Id;
                    var mappedLike = _mapper.Map <LikeEntity>(addLike);
                    if (_ctx.AddOrRemoveLike(mappedLike))
                    {
                        return(Ok($"An LIKE has been ADDED on comment:{id} by {_user.Name}"));
                    }
                }
                if (like.Any(v => v.LikedById == _user.Id))
                {
                    var result = like.FirstOrDefault(c => c.LikedById == _user.Id);
                    if (_ctx.AddOrRemoveLike(result, _user.Id))
                    {
                        return(Ok($"A like has been REMOVED on comment:{id} by {_user.Name}"));
                    }
                    return(NotFound("No LIKE was found for REMOVAL."));
                }
                return(BadRequest($"You have already LIKED comment: {id}."));
            }
            return(Unauthorized(Message("unautherized")));
        }
Example #7
0
        public async Task <CommandResult> Unlike(AddLikeDto removeLikeDto)
        {
            if (removeLikeDto is null)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.ADD.NULL",
                    Message = "Please send valid information",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }
            var(login, user) = await _userDataManager.AddCurrentUserIfNeeded();

            if (user?.UserId is null)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.REMOVE.UNAUTHORIZED",
                    Message = "You are not authorized to execute this request",
                    StatusCode = System.Net.HttpStatusCode.Unauthorized,
                }));
            }

            var @object = _objectsRepo.Get(removeLikeDto.ObjectId);

            if (@object is null || @object.ObjectStatus != ObjectStatus.Available)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.REMOVE.UNAVAILABLE",
                    Message = "This object is unavailable",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }

            var previousLikes = _likesRepo.Table.Where(ol => ol.Login.UserId == user.UserId && ol.ObjectId == removeLikeDto.ObjectId).ToList();

            if (previousLikes.IsNullOrEmpty())
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.LIKE.REMOVE.NO.PREVIOUS.LIKE",
                    Message = "You have not liked this object before",
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                }));
            }

            _likesRepo.Delete(previousLikes.SingleOrDefault());
            await _likesRepo.SaveChangesAsync();

            return(new CommandResult());
        }
Example #8
0
        public void AddLike(AddLikeDto like)
        {
            var addLike = new Likes();

            var existingLike = _likesRepository.GetFirstWhere(x => x.UserId == like.UserId && x.PostId == like.PostId);

            if (existingLike != null)
            {
                throw new FlowException("Like already exists!");
            }

            addLike = DTOtoModel.AddLikeDTOtoLike(like, addLike);
            _likesRepository.Add(addLike);
            _likesRepository.SaveEntities();
        }
        public ActionResult AddLike(AddLikeDto like)
        {
            try
            {
                _likesService.AddLike(like);
            }
            catch (FlowException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception)
            {
                return(StatusCode(500, "An error has occured!Try again later!"));
            }

            return(CreatedAtAction("AddLike", like));
        }
Example #10
0
        public async Task ToggleLikeAsync(AddLikeDto addLikeDto, UserAndOrganizationDto userOrg)
        {
            var comment = await _commentsDbSet
                          .Include(x => x.Post.Wall)
                          .FirstOrDefaultAsync(x => x.Id == addLikeDto.Id && x.Post.Wall.OrganizationId == userOrg.OrganizationId);

            if (comment == null)
            {
                throw new ValidationException(ErrorCodes.ContentDoesNotExist, "Comment does not exist");
            }

            var like = comment.Likes.FirstOrDefault(x => x.UserId == userOrg.UserId);

            if (like == null)
            {
                comment.Likes.Add(new Like(userOrg.UserId, addLikeDto.Type));
            }
            else
            {
                comment.Likes.Remove(like);
            }

            await _uow.SaveChangesAsync(userOrg.UserId);
        }