From 1b1116a98d88fba25d0c5b0ace7c046c605c10c7 Mon Sep 17 00:00:00 2001 From: hvs-flick Date: Sun, 24 Dec 2023 17:10:14 +0530 Subject: [PATCH] Add proxy to call whatsapp server --- .../bean/confugration/ProxyConfiguration.java | 6 +++ .../platform/proxy/WhatsAppProxy.java | 38 +++++++++++++++++++ .../rest/PhonePeCallBackController.java | 4 ++ .../platform/proxy/WhatsAppProxyTest.java | 36 ++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 platform/src/main/java/com/flickmatch/platform/proxy/WhatsAppProxy.java create mode 100644 platform/src/test/java/com/flickmatch/platform/proxy/WhatsAppProxyTest.java diff --git a/platform/src/main/java/com/flickmatch/platform/bean/confugration/ProxyConfiguration.java b/platform/src/main/java/com/flickmatch/platform/bean/confugration/ProxyConfiguration.java index d6ad1e84..0942ad07 100644 --- a/platform/src/main/java/com/flickmatch/platform/bean/confugration/ProxyConfiguration.java +++ b/platform/src/main/java/com/flickmatch/platform/bean/confugration/ProxyConfiguration.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; @Configuration public class ProxyConfiguration { @@ -20,4 +21,9 @@ public class ProxyConfiguration { PhonePePaymentClient phonePePaymentClient() { return new PhonePePaymentClient(merchantId, saltKey, saltIndex, Env.PROD, true); } + + @Bean + RestTemplate restTemplate() { + return new RestTemplate(); + } } diff --git a/platform/src/main/java/com/flickmatch/platform/proxy/WhatsAppProxy.java b/platform/src/main/java/com/flickmatch/platform/proxy/WhatsAppProxy.java new file mode 100644 index 00000000..7c0882fa --- /dev/null +++ b/platform/src/main/java/com/flickmatch/platform/proxy/WhatsAppProxy.java @@ -0,0 +1,38 @@ +package com.flickmatch.platform.proxy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class WhatsAppProxy { + // Create a RestTemplate + @Autowired + private RestTemplate restTemplate; + + public void sendNotification() { + String nodeServerUrl = "http://ec2-18-223-205-234.us-east-2.compute.amazonaws.com:3000/"; + + // Create headers + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + // Create the request payload + String requestData = "{\"name\":\"John\",\"age\":30}"; + HttpEntity requestEntity = new HttpEntity<>(requestData, headers); + + // Make a POST request to the Node.js server + ResponseEntity responseEntity = restTemplate.getForEntity(nodeServerUrl, String.class); + // Print the response + if (responseEntity.getStatusCode().is2xxSuccessful()) { + String responseBody = responseEntity.getBody(); + System.out.println("Response from Node.js server: " + responseBody); + } else { + System.err.println("Failed to post data to Node.js server"); + } + } +} diff --git a/platform/src/main/java/com/flickmatch/platform/rest/PhonePeCallBackController.java b/platform/src/main/java/com/flickmatch/platform/rest/PhonePeCallBackController.java index ad632372..a359743c 100644 --- a/platform/src/main/java/com/flickmatch/platform/rest/PhonePeCallBackController.java +++ b/platform/src/main/java/com/flickmatch/platform/rest/PhonePeCallBackController.java @@ -6,6 +6,7 @@ import com.flickmatch.platform.dynamodb.model.PaymentRequest; import com.flickmatch.platform.graphql.builder.EventBuilder; import com.flickmatch.platform.graphql.builder.PaymentRequestBuilder; +import com.flickmatch.platform.proxy.WhatsAppProxy; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.json.JacksonJsonParser; @@ -32,6 +33,8 @@ public class PhonePeCallBackController { PaymentRequestBuilder paymentRequestBuilder; @Autowired EventBuilder eventBuilder; + @Autowired + WhatsAppProxy whatsAppProxy; @PostMapping("/payment") void processCallBack(@RequestBody CallBackResponse callBackResponse, @@ -48,6 +51,7 @@ void processCallBack(@RequestBody CallBackResponse callBackResponse, if ("PAYMENT_SUCCESS".equals(phonePeResponse.get("code"))) { eventBuilder.joinEvent(paymentRequest); paymentRequestBuilder.updatePaymentRequestStatus(paymentRequest, true); + whatsAppProxy.sendNotification(); } else { log.info(merchantTransactionId); log.error(decodedResponse); diff --git a/platform/src/test/java/com/flickmatch/platform/proxy/WhatsAppProxyTest.java b/platform/src/test/java/com/flickmatch/platform/proxy/WhatsAppProxyTest.java new file mode 100644 index 00000000..1a5e307c --- /dev/null +++ b/platform/src/test/java/com/flickmatch/platform/proxy/WhatsAppProxyTest.java @@ -0,0 +1,36 @@ +package com.flickmatch.platform.proxy; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; + +@ExtendWith(MockitoExtension.class) +class WhatsAppProxyTest { + + @Mock + RestTemplate restTemplate; + + @InjectMocks WhatsAppProxy whatsAppProxy; + + @Test + public void test_WhenCallIsSuccessful() { + Mockito.when(restTemplate.getForEntity(anyString(), any())).thenReturn(ResponseEntity.accepted().build()); + whatsAppProxy.sendNotification(); + Mockito.verify(restTemplate).getForEntity(anyString(), any()); + } + + @Test + public void test_WhenCallFails() { + Mockito.when(restTemplate.getForEntity(anyString(), any())).thenReturn(ResponseEntity.internalServerError().build()); + whatsAppProxy.sendNotification(); + Mockito.verify(restTemplate).getForEntity(anyString(), any()); + } +} \ No newline at end of file