Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/main/java/io/craftgate/adapter/FileReportingAdapter.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package io.craftgate.adapter;

import io.craftgate.net.HttpClient;
import io.craftgate.request.CreateReportRequest;
import io.craftgate.request.RetrieveDailyPaymentReportRequest;
import io.craftgate.request.RetrieveDailyTransactionReportRequest;
import io.craftgate.request.RetrieveReportRequest;
import io.craftgate.request.common.RequestOptions;
import io.craftgate.request.common.RequestQueryParamsBuilder;
import io.craftgate.response.ReportDemandResponse;

import java.util.Map;

Expand Down Expand Up @@ -32,4 +35,21 @@ public byte[] retrieveDailyPaymentReport(RetrieveDailyPaymentReportRequest retri
headers.put(CONTENT_TYPE, APPLICATION_OCTET_STREAM);
return HttpClient.get(requestOptions.getBaseUrl() + path, headers, byte[].class);
}

public ReportDemandResponse createReport(CreateReportRequest request) {
String path = "/file-reporting/v1/report-demands";
Map<String, String> headers = createHeaders(request, path, requestOptions);
return HttpClient.post(requestOptions.getBaseUrl() + path,
headers,
request,
ReportDemandResponse.class);
}

public byte[] retrieveReport(RetrieveReportRequest retrieveReportRequest, Long reportId) {
String query = RequestQueryParamsBuilder.buildQueryParam(retrieveReportRequest);
String path = "/file-reporting/v1/reports/" + reportId + query;
Map<String, String> headers = createHeaders(path, requestOptions);
headers.put(CONTENT_TYPE, APPLICATION_OCTET_STREAM);
return HttpClient.get(requestOptions.getBaseUrl() + path, headers, byte[].class);
}
}
5 changes: 5 additions & 0 deletions src/main/java/io/craftgate/model/ReportPeriod.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.craftgate.model;

public enum ReportPeriod {
INSTANT
}
6 changes: 6 additions & 0 deletions src/main/java/io/craftgate/model/ReportType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.craftgate.model;

public enum ReportType {
TRANSACTION,
PAYMENT,
}
12 changes: 2 additions & 10 deletions src/main/java/io/craftgate/net/HttpClient.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package io.craftgate.net;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import io.craftgate.exception.CraftgateException;
import io.craftgate.request.common.Jsons;
import io.craftgate.response.common.ErrorResponse;
import io.craftgate.response.common.Response;

Expand All @@ -12,7 +11,6 @@
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.Objects;

Expand All @@ -23,7 +21,7 @@ public class HttpClient {
private static final String ACCEPT = "Accept";
private static final int CONNECT_TIMEOUT = 10000;
private static final int READ_TIMEOUT = 150000;
private static final Gson gson = buildGson();
private static final Gson gson = Jsons.getGson();

private HttpClient() {
}
Expand Down Expand Up @@ -180,12 +178,6 @@ private static byte[] body(HttpURLConnection conn) throws IOException {
}
return body;
}

private static Gson buildGson() {
return new GsonBuilder()
.registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, typeOfT, context) -> LocalDateTime.parse(json.getAsString()))
.create();
}
}

class HttpResponse {
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/io/craftgate/request/CreateReportRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.craftgate.request;

import io.craftgate.model.ReportPeriod;
import io.craftgate.model.ReportType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CreateReportRequest {

private LocalDateTime startDate;

private LocalDateTime endDate;

@Builder.Default
private ReportType reportType = ReportType.TRANSACTION;

@Builder.Default
private ReportPeriod reportPeriod = ReportPeriod.INSTANT;
}
13 changes: 13 additions & 0 deletions src/main/java/io/craftgate/request/RetrieveReportRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.craftgate.request;


import io.craftgate.model.ReportFileType;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class RetrieveReportRequest {

private ReportFileType fileType;
}
5 changes: 4 additions & 1 deletion src/main/java/io/craftgate/request/common/HashGenerator.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package io.craftgate.request.common;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import io.craftgate.exception.CraftgateException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;

public final class HashGenerator {

Expand All @@ -19,7 +22,7 @@ public static String generateHash(String baseUrl, String apiKey, String secretKe
String decodedUrl = URLDecoder.decode(baseUrl + path, StandardCharsets.UTF_8.toString());

if (request != null) {
Gson gson = new Gson();
Gson gson = Jsons.getGson();
String requestBody = gson.toJson(request);
hashData = decodedUrl + apiKey + secretKey + randomString + requestBody;
} else {
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/io/craftgate/request/common/Jsons.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.craftgate.request.common;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonSerializer;

import java.time.LocalDateTime;

public final class Jsons {

private static final Gson GSON = new GsonBuilder()
.registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (localDateTime, typeOfSrc, context) ->
context.serialize(localDateTime.toString()))
.registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, typeOfT, context) ->
LocalDateTime.parse(json.getAsString()))
.create();

private Jsons() {
}

public static Gson getGson() {
return GSON;
}
}
16 changes: 16 additions & 0 deletions src/main/java/io/craftgate/response/ReportDemandResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.craftgate.response;

import io.craftgate.model.ReportPeriod;
import io.craftgate.model.ReportType;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class ReportDemandResponse {
private Long id;
private ReportType reportType;
private ReportPeriod reportPeriod;
private LocalDateTime startDate;
private LocalDateTime endDate;
}
26 changes: 26 additions & 0 deletions src/test/java/io/craftgate/sample/FileReportingSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import io.craftgate.Craftgate;
import io.craftgate.model.ReportFileType;
import io.craftgate.request.CreateReportRequest;
import io.craftgate.request.RetrieveDailyPaymentReportRequest;
import io.craftgate.request.RetrieveDailyTransactionReportRequest;
import io.craftgate.request.RetrieveReportRequest;
import io.craftgate.response.ReportDemandResponse;
import org.junit.jupiter.api.Test;

import java.time.LocalDate;
import java.time.LocalDateTime;

import static org.junit.jupiter.api.Assertions.assertNotNull;

Expand Down Expand Up @@ -35,4 +39,26 @@ void retrieve_daily_payment_report() {
String response = new String(craftgate.fileReporting().retrieveDailyPaymentReport(retrieveRequest));
assertNotNull(response);
}

@Test
void create_report_demand() {
CreateReportRequest request = CreateReportRequest.builder()
.startDate(LocalDateTime.now().minusDays(2))
.endDate(LocalDateTime.now())
.build();

ReportDemandResponse response = craftgate.fileReporting().createReport(request);
assertNotNull(response);
assertNotNull(response.getId());
}

@Test
void retrieve_report() {
RetrieveReportRequest retrieveReportRequest = RetrieveReportRequest.builder()
.fileType(ReportFileType.CSV)
.build();

String response = new String(craftgate.fileReporting().retrieveReport(retrieveReportRequest, 49L));
assertNotNull(response);
}
}
4 changes: 2 additions & 2 deletions src/test/java/io/craftgate/sample/PayByLinkSample.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashSet;

import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -35,6 +36,7 @@ void create_product() {
.price(BigDecimal.TEN)
.currency(Currency.TRY)
.conversationId("my-conversationId")
.expiresAt(LocalDateTime.now().plusDays(2))
.externalId("my-externalId")
.enabledInstallments(enabledInstallments)
.build();
Expand All @@ -49,7 +51,6 @@ void create_product() {
assertEquals(response.getEnabledInstallments(), request.getEnabledInstallments());
assertNotNull(response.getUrl());
assertNotNull(response.getToken());
assertNotNull(response.getQrCodeUrl());
}

@Test
Expand Down Expand Up @@ -80,7 +81,6 @@ void update_product() {
assertEquals(response.getEnabledInstallments(), request.getEnabledInstallments());
assertNotNull(response.getUrl());
assertNotNull(response.getToken());
assertNotNull(response.getQrCodeUrl());
}

@Test
Expand Down