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")); }
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"); }