public async Task <ApiResponse <LikeResponseDto> > LikePost(LikeDto likeRequest) { // Do a check on the Request Ip Address and User-Agent to ensure a like action is not // Initiated twice from the same user on the same device to avoid spam // Also do a check on the RequestUsername supplied from the client, to ensure a particular user // Does not Like twice (just incase request is sent from same user with the a different device) ApiResponse <LikeResponseDto> result = new ApiResponse <LikeResponseDto>(); var resultMessage = ""; Likes like = _mapper.Map <Likes>(likeRequest); try { var isLikedFromClient = await LikedExistFromClient(likeRequest.RequestIpAddress, likeRequest.RequestUserAgent, likeRequest.ClientReferenceId, likeRequest.PostId, likeRequest.RequestUsername); if (isLikedFromClient) { resultMessage = $"Post with Id: {likeRequest.PostId} has be been Liked from {resultMessage} Ip Address:: {likeRequest.RequestIpAddress} by Username:: {likeRequest.RequestUsername} (Action is permitted only once) "; _logger.LogInformation(resultMessage); throw new AppException(resultMessage); } like.CreatedOn = DateTime.Now; await _likeRepository.AddAsync(like); await _unitOfWork.CompleteAsync(); resultMessage = "Successfully liked post"; result.Status = Helpers.ApiReponseStatusCodes.Created; result.Message = resultMessage; result.Data = new LikeResponseDto { RequestIpAddress = like.RequestIpAddress, RequestUserAgent = like.RequestUserAgent, PostId = like.PostId, ClientReferenceId = like.ClientReferenceId, RequestUsername = like.RequestUsername }; return(result); } catch (Exception ex) { _logger.Log(LogLevel.Error, ex.StackTrace); _logger.Log(LogLevel.Error, ex.Message); throw new AppException(ex.Message); } }