예제 #1
0
        public async Task <IActionResult> LikeUser(int id, int receiverId)
        {
            if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            //Checking if the user already liked recipient user
            var like = await _repo.GetLike(id, receiverId);

            var reverseLike = await _repo.GetLike(receiverId, id);

            if (like != null)
            {
                return(BadRequest("User already liked"));
            }

            if (await _repo.GetUser(receiverId) == null)
            {
                return(NotFound());
            }

            //first like
            if (like == null && reverseLike == null)
            {
                like = new Like
                {
                    LikeeId = receiverId,
                    LikerId = id
                };
                _repo.Add <Like>(like);
            }

            //Match like
            if (reverseLike != null)
            {
                reverseLike.Match = true;
            }


            if (await _repo.SaveAll())
            {
                if (reverseLike != null)
                {
                    return(Ok(_mapper.Map <LikeToReturnDto>(reverseLike)));
                }
                // client side check if userId == response.data.likerId then first like else match like
                return(Ok(_mapper.Map <LikeToReturnDto>(like)));
            }


            return(BadRequest("Failed to like user"));
        }
예제 #2
0
        public async Task <IActionResult> CreateMessage(int userId, MessageForCreationDto messageForCreationDto)
        {
            var sender = await _repo.GetUser(userId);

            if (sender.Id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            messageForCreationDto.SenderId = userId;
            var receiver = await _repo.GetUser(messageForCreationDto.ReceiverId);

            if (receiver == null)
            {
                return(BadRequest("User not found"));
            }

            var message = _mapper.Map <Message>(messageForCreationDto);

            var like = await _repo.GetLike(userId, receiver.Id);

            var reverseLike = await _repo.GetLike(receiver.Id, userId);

            if (like == null && reverseLike == null)
            {
                return(BadRequest("Cannot message without a match"));
            }

            if (like != null)
            {
                if (like.Match == false)
                {
                    return(BadRequest("Cannot message without a match"));
                }
            }
            if (reverseLike != null)
            {
                if (reverseLike.Match == false)
                {
                    return(BadRequest("Cannot message without a match"));
                }
            }

            _repo.Add(message);
            if (await _repo.SaveAll())
            {
                var messageToReturn = _mapper.Map <MessageForCreationDto>(message);
                return(CreatedAtRoute(nameof(GetMessage), new { userId = userId, id = message.Id }, messageToReturn));
            }

            throw new Exception("Creating the message failed on save");
        }