Commit 54870371 authored by Ben Anderson's avatar Ben Anderson

Created a DataClient for saving authorizations to CosmosDB

parent 6db64144
......@@ -21,6 +21,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.5.3'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.4'
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.5.3'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
......
package com.nisum.paymentvendorsimulator.creditcard.data;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.net.www.http.HttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@Component
public class DataServiceClient {
@Value("${data.endpoint}")
private String dataServiceEndpoint;
private final ObjectMapper objectMapper = new ObjectMapper();
private CreditCardResponse convertResponse(String rawResponse) throws JsonProcessingException {
CreditCardResponse res = objectMapper.readValue(rawResponse.toString(), CreditCardResponse.class);
return res;
}
public void saveAuthorization(CreditCardResponse ccData) throws IOException {
URL url = new URL(dataServiceEndpoint);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
// Attach the body
String jsonBody = objectMapper.writeValueAsString(ccData);
try(OutputStream os = connection.getOutputStream()) {
byte[] input = jsonBody.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
// Read the response
try(BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println(response.toString());
}
connection.disconnect();
}
public CreditCardResponse getAuthorization(String id) throws IOException {
URL url = new URL(dataServiceEndpoint + "/" + id);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "application/json");
int status = connection.getResponseCode();
if (status >= 200 & status < 300) {
System.out.println("SUCCESS");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
System.out.println(content.toString());
CreditCardResponse res = convertResponse(content.toString());
return res;
} else {
System.out.println("ERROR");
}
connection.disconnect();
return null;
}
}
......@@ -11,6 +11,7 @@ import lombok.Setter;
@NoArgsConstructor
public class CreditCardResponse {
String id;
String cardNumber;
String cvv;
Boolean address;
......
package com.nisum.paymentvendorsimulator.creditcard.services;
import com.nisum.paymentvendorsimulator.creditcard.data.DataServiceClient;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardAdditionalData;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardAuthorizeResponse;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardRequest;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class CreditCardService {
private static final Logger logger = LoggerFactory.getLogger(CreditCardService.class);
private final DataServiceClient dataClient;
public CreditCardService(DataServiceClient dataClient) {
this.dataClient = dataClient;
}
public CreditCardResponse authorize(CreditCardRequest ccRequest) {
logger.info(String.valueOf(ccRequest));
......@@ -31,6 +40,11 @@ public class CreditCardService {
res.setCreditCardAuthorizeResponse(ccAR);
try {
dataClient.saveAuthorization(res);
} catch (IOException e) {
System.out.println(e);
}
return res;
}
}
data.endpoint=http://localhost:8081/api/authorizations
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment