From 0390da239506afdbc5bf915701e103498bf6b557 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Wed, 29 Jul 2026 11:02:53 +0300 Subject: [PATCH 1/6] Idempotency support --- README.md | 29 +++++ .../io/craftgate/adapter/BaseAdapter.java | 29 ++++- .../io/craftgate/adapter/FraudAdapter.java | 13 +- .../io/craftgate/adapter/MerchantAdapter.java | 16 +-- .../craftgate/adapter/PayByLinkAdapter.java | 7 +- .../io/craftgate/adapter/PaymentAdapter.java | 18 +-- .../adapter/PaymentTokenAdapter.java | 7 +- .../craftgate/adapter/SettlementAdapter.java | 7 +- .../io/craftgate/adapter/WalletAdapter.java | 6 +- ...dCardFingerprintFraudValueListRequest.java | 9 +- .../ApplePayMerchantSessionCreateRequest.java | 9 +- .../request/ApproveBnplPaymentRequest.java | 14 +++ .../ApprovePaymentTransactionsRequest.java | 8 +- .../request/BnplLimitInquiryRequest.java | 9 +- .../request/BnplPaymentOfferRequest.java | 9 +- .../request/CancelWithdrawRequest.java | 14 +++ .../request/CheckMasterpassUserRequest.java | 9 +- .../craftgate/request/CloneCardRequest.java | 9 +- .../request/CompleteApmPaymentRequest.java | 9 +- .../request/CompleteBkmExpressRequest.java | 8 +- .../request/CompletePosApmPaymentRequest.java | 9 +- .../CompleteThreeDSPaymentRequest.java | 9 +- .../request/CreateApmPaymentRequest.java | 9 +- .../request/CreateDepositPaymentRequest.java | 9 +- .../request/CreateDepositToCardRequest.java | 9 +- ...eateFundTransferDepositPaymentRequest.java | 9 +- .../CreateInstantWalletSettlementRequest.java | 9 +- .../request/CreateMemberRequest.java | 9 +- .../request/CreateMerchantPosRequest.java | 8 +- .../request/CreateMerchantRequest.java | 5 +- .../request/CreatePaymentRequest.java | 5 +- .../request/CreatePaymentTokenRequest.java | 9 +- .../request/CreatePayoutAccountRequest.java | 9 +- .../request/CreateProductRequest.java | 9 +- .../request/CreateRemittanceRequest.java | 9 +- .../request/CreateReportRequest.java | 8 +- .../request/CreateWalletRequest.java | 9 +- .../request/CreateWithdrawRequest.java | 9 +- .../request/DeleteMerchantPosRequest.java | 14 +++ .../request/DeletePaymentTokenRequest.java | 14 +++ .../request/DeletePayoutAccountRequest.java | 14 +++ .../request/DeleteProductRequest.java | 14 +++ .../request/DeleteStoredCardRequest.java | 9 +- .../request/DeleteValueListRequest.java | 14 +++ .../DisapprovePaymentTransactionsRequest.java | 8 +- .../request/ExpireCheckoutPaymentRequest.java | 14 +++ .../request/FraudValueListRequest.java | 9 +- .../request/InitApmDepositPaymentRequest.java | 9 +- .../request/InitApmPaymentRequest.java | 5 +- .../request/InitBkmExpressRequest.java | 8 +- .../InitCheckoutCardVerifyRequest.java | 9 +- .../request/InitCheckoutPaymentRequest.java | 8 +- .../request/InitGarantiPayPaymentRequest.java | 9 +- .../request/InitJuzdanPaymentRequest.java | 8 +- .../request/InitMultiPaymentRequest.java | 9 +- .../request/InitPosApmPaymentRequest.java | 8 +- .../MasterpassPaymentCompleteRequest.java | 9 +- ...sterpassPaymentThreeDSCompleteRequest.java | 9 +- .../MasterpassPaymentThreeDSInitRequest.java | 9 +- ...MasterpassPaymentTokenGenerateRequest.java | 9 +- .../MasterpassRetrieveLoyaltiesRequest.java | 29 +++-- ...ealVoucherCardTokenizationInitRequest.java | 9 +- .../request/PostAuthPaymentRequest.java | 9 +- .../request/RefundPaymentRequest.java | 8 +- ...ymentTransactionMarkAsRefundedRequest.java | 8 +- .../RefundPaymentTransactionRequest.java | 8 +- .../request/RefundWaitingPaymentRequest.java | 9 +- .../RefundWalletTransactionToCardRequest.java | 9 +- .../RemoveValueFromValueListRequest.java | 15 +++ ...setMerchantMemberWalletBalanceRequest.java | 9 +- .../request/RetrieveCardFromIvrRequest.java | 9 +- .../RetrieveDailyPaymentReportRequest.java | 9 +- ...RetrieveDailyTransactionReportRequest.java | 9 +- .../request/RetrieveLoyaltiesRequest.java | 45 +++---- .../request/RetrieveProviderCardRequest.java | 9 +- .../request/RetrieveReportRequest.java | 9 +- ...archBankAccountTrackingRecordsRequest.java | 8 +- .../request/SearchFraudChecksRequest.java | 9 +- .../request/SearchFraudRuleRequest.java | 9 +- .../request/SearchInstallmentsRequest.java | 9 +- .../request/SearchMembersRequest.java | 8 +- .../request/SearchMerchantPosRequest.java | 9 +- .../request/SearchPaymentRefundsRequest.java | 9 +- ...earchPaymentTransactionRefundsRequest.java | 9 +- .../request/SearchPaymentsRequest.java | 9 +- .../request/SearchPayoutAccountRequest.java | 8 +- ...earchPayoutBouncedTransactionsRequest.java | 9 +- ...rchPayoutCompletedTransactionsRequest.java | 9 +- .../request/SearchPayoutRowsRequest.java | 8 +- .../request/SearchProductsRequest.java | 9 +- .../request/SearchStoredCardsRequest.java | 8 +- .../SearchWalletTransactionsRequest.java | 8 +- .../request/SearchWithdrawsRequest.java | 8 +- .../craftgate/request/StoreCardRequest.java | 9 +- .../craftgate/request/UpdateCardRequest.java | 9 +- .../request/UpdateFraudCheckRequest.java | 9 +- .../request/UpdateMemberRequest.java | 9 +- .../UpdateMerchantPosCommissionsRequest.java | 9 +- .../request/UpdateMerchantPosRequest.java | 9 +- .../UpdateMerchantPosStatusRequest.java | 16 +++ .../UpdatePaymentTransactionRequest.java | 9 +- .../request/UpdatePayoutAccountRequest.java | 9 +- .../request/UpdateProductRequest.java | 9 +- .../request/UpdateWalletRequest.java | 9 +- .../request/VerifyBnplPaymentRequest.java | 14 +++ .../craftgate/request/VerifyCardRequest.java | 9 +- .../craftgate/request/common/BaseRequest.java | 28 +++++ .../adapter/BaseRequestFoundationTest.java | 113 ++++++++++++++++++ .../craftgate/sample/BnplPaymentSample.java | 10 +- .../java/io/craftgate/sample/FraudSample.java | 11 +- .../io/craftgate/sample/MerchantSample.java | 11 +- .../io/craftgate/sample/PayByLinkSample.java | 5 +- .../io/craftgate/sample/PaymentSample.java | 40 ++++++- .../craftgate/sample/PaymentTokenSample.java | 5 +- .../io/craftgate/sample/SettlementSample.java | 5 +- .../io/craftgate/sample/WalletSample.java | 4 +- 116 files changed, 1010 insertions(+), 310 deletions(-) create mode 100644 src/main/java/io/craftgate/request/ApproveBnplPaymentRequest.java create mode 100644 src/main/java/io/craftgate/request/CancelWithdrawRequest.java create mode 100644 src/main/java/io/craftgate/request/DeleteMerchantPosRequest.java create mode 100644 src/main/java/io/craftgate/request/DeletePaymentTokenRequest.java create mode 100644 src/main/java/io/craftgate/request/DeletePayoutAccountRequest.java create mode 100644 src/main/java/io/craftgate/request/DeleteProductRequest.java create mode 100644 src/main/java/io/craftgate/request/DeleteValueListRequest.java create mode 100644 src/main/java/io/craftgate/request/ExpireCheckoutPaymentRequest.java create mode 100644 src/main/java/io/craftgate/request/RemoveValueFromValueListRequest.java create mode 100644 src/main/java/io/craftgate/request/UpdateMerchantPosStatusRequest.java create mode 100644 src/main/java/io/craftgate/request/VerifyBnplPaymentRequest.java create mode 100644 src/main/java/io/craftgate/request/common/BaseRequest.java create mode 100644 src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java diff --git a/README.md b/README.md index ce7e6567..575c72de 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,35 @@ PaymentResponse response = craftgate.payment().createPayment(request); System.out.println(String.format("Create Payment Result: %s", response)); ``` +### Idempotency +Mutating operations (`POST`/`PUT`/`DELETE`) accept an optional idempotency key. Set it on the request object and the client sends it as the `x-idempotency-key` header, so a request can be safely retried (e.g. after a timeout) without the operation being performed twice — the server returns the result of the first request when it sees a repeated key. + +Every request extends `BaseRequest`, so the key is available on any request via the builder: + +```java +CreatePaymentRequest request = CreatePaymentRequest.builder() + .price(BigDecimal.valueOf(100)) + .paidPrice(BigDecimal.valueOf(100)) + .currency(Currency.TRY) + .paymentGroup(PaymentGroup.LISTING_OR_SUBSCRIPTION) + .idempotencyKey(UUID.randomUUID().toString()) + // ... other fields + .build(); + +PaymentResponse response = craftgate.payment().createPayment(request); +``` + +Operations whose parameters live in the URL path (e.g. deletes) take a request object as well, so they can carry an idempotency key too: + +```java +craftgate.payment().expireCheckoutPayment(ExpireCheckoutPaymentRequest.builder() + .token("456d1297-908e-4bd6-a13b-4be31a6e47d5") + .idempotencyKey(UUID.randomUUID().toString()) + .build()); +``` + +> Use a fresh key per distinct operation, and reuse the same key when retrying that operation. + ### Contributions For all contributions to this client please see the contribution guide [here](CONTRIBUTING.md). By participating in this project, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md). diff --git a/src/main/java/io/craftgate/adapter/BaseAdapter.java b/src/main/java/io/craftgate/adapter/BaseAdapter.java index 1c3c7f5a..836748d4 100644 --- a/src/main/java/io/craftgate/adapter/BaseAdapter.java +++ b/src/main/java/io/craftgate/adapter/BaseAdapter.java @@ -1,5 +1,6 @@ package io.craftgate.adapter; +import io.craftgate.request.common.BaseRequest; import io.craftgate.request.common.HashGenerator; import io.craftgate.request.common.RequestOptions; @@ -18,6 +19,7 @@ public abstract class BaseAdapter { private static final String CLIENT_VERSION_HEADER_NAME = "x-client-version"; private static final String SIGNATURE_HEADER_NAME = "x-signature"; private static final String LANGUAGE_HEADER_NAME = "lang"; + private static final String IDEMPOTENCY_KEY_HEADER_NAME = "x-idempotency-key"; protected final RequestOptions requestOptions; @@ -25,15 +27,31 @@ protected BaseAdapter(RequestOptions requestOptions) { this.requestOptions = requestOptions; } - protected Map createHeaders(Object request, String path, RequestOptions requestOptions) { - return createHttpHeaders(request, path, requestOptions); + /** + * Headers for a request that carries a body. The body is hashed for the signature and its + * idempotency key, when present, is sent as a header. + */ + protected Map createHeaders(BaseRequest request, String path, RequestOptions requestOptions) { + return createHttpHeaders(request, path, requestOptions, request.getIdempotencyKey()); } + /** + * Headers for a body-less request (e.g. GET). No body is hashed and no idempotency key is sent. + */ protected Map createHeaders(String path, RequestOptions requestOptions) { - return createHttpHeaders(null, path, requestOptions); + return createHttpHeaders(null, path, requestOptions, null); } - private static Map createHttpHeaders(Object request, String path, RequestOptions options) { + /** + * Headers for a body-less mutating request (e.g. DELETE, or a POST/PUT whose parameters live in + * the path). The {@code request} wrapper is not hashed or sent as a body — only its + * idempotency key is used, so the signature stays identical to the body-less call the server expects. + */ + protected Map createHeaders(String path, RequestOptions requestOptions, BaseRequest request) { + return createHttpHeaders(null, path, requestOptions, request.getIdempotencyKey()); + } + + private static Map createHttpHeaders(Object request, String path, RequestOptions options, String idempotencyKey) { Map headers = new HashMap<>(); String randomString = UUID.randomUUID().toString(); @@ -45,6 +63,9 @@ private static Map createHttpHeaders(Object request, String path if (Objects.nonNull(options.getLanguage())) { headers.put(LANGUAGE_HEADER_NAME, options.getLanguage()); } + if (Objects.nonNull(idempotencyKey)) { + headers.put(IDEMPOTENCY_KEY_HEADER_NAME, idempotencyKey); + } return headers; } diff --git a/src/main/java/io/craftgate/adapter/FraudAdapter.java b/src/main/java/io/craftgate/adapter/FraudAdapter.java index 5fc61d9d..f96945c2 100644 --- a/src/main/java/io/craftgate/adapter/FraudAdapter.java +++ b/src/main/java/io/craftgate/adapter/FraudAdapter.java @@ -45,10 +45,10 @@ public void createValueList(String listName, FraudValueType type) { addValueToValueList(createRequest); } - public void deleteValueList(String listName) { - String path = "/fraud/v1/value-lists/" + listName; + public void deleteValueList(DeleteValueListRequest deleteValueListRequest) { + String path = "/fraud/v1/value-lists/" + deleteValueListRequest.getListName(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteValueListRequest)); } public void addValueToValueList(FraudValueListRequest fraudValueListRequest) { @@ -63,9 +63,10 @@ public void addCardFingerprint(AddCardFingerprintFraudValueListRequest request, request, Void.class); } - public void removeValueFromValueList(String listName, String valueId) { - String path = "/fraud/v1/value-lists/" + listName + "/values/" + valueId; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void removeValueFromValueList(RemoveValueFromValueListRequest removeValueFromValueListRequest) { + String path = "/fraud/v1/value-lists/" + removeValueFromValueListRequest.getListName() + + "/values/" + removeValueFromValueListRequest.getValueId(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, removeValueFromValueListRequest)); } public FraudRuleListResponse searchRules(SearchFraudRuleRequest searchFraudRuleRequest) { diff --git a/src/main/java/io/craftgate/adapter/MerchantAdapter.java b/src/main/java/io/craftgate/adapter/MerchantAdapter.java index 90750463..9ea45587 100644 --- a/src/main/java/io/craftgate/adapter/MerchantAdapter.java +++ b/src/main/java/io/craftgate/adapter/MerchantAdapter.java @@ -1,11 +1,12 @@ package io.craftgate.adapter; -import io.craftgate.model.PosStatus; import io.craftgate.net.HttpClient; import io.craftgate.request.CreateMerchantPosRequest; +import io.craftgate.request.DeleteMerchantPosRequest; import io.craftgate.request.SearchMerchantPosRequest; import io.craftgate.request.UpdateMerchantPosCommissionsRequest; import io.craftgate.request.UpdateMerchantPosRequest; +import io.craftgate.request.UpdateMerchantPosStatusRequest; import io.craftgate.request.common.RequestOptions; import io.craftgate.request.common.RequestQueryParamsBuilder; import io.craftgate.response.MerchantPosCommissionListResponse; @@ -30,9 +31,10 @@ public MerchantPosResponse updateMerchantPos(Long merchantPosId, UpdateMerchantP updateMerchantPosRequest, MerchantPosResponse.class); } - public void updateMerchantPosStatus(Long merchantPosId, PosStatus posStatus) { - String path = "/merchant/v1/merchant-poses/" + merchantPosId + "/status/" + posStatus.name(); - HttpClient.put(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), Void.class); + public void updateMerchantPosStatus(UpdateMerchantPosStatusRequest updateMerchantPosStatusRequest) { + String path = "/merchant/v1/merchant-poses/" + updateMerchantPosStatusRequest.getMerchantPosId() + + "/status/" + updateMerchantPosStatusRequest.getPosStatus().name(); + HttpClient.put(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, updateMerchantPosStatusRequest), Void.class); } public MerchantPosListResponse searchMerchantPos(SearchMerchantPosRequest searchMerchantPosRequest) { @@ -46,9 +48,9 @@ public MerchantPosResponse retrieve(Long merchantPosId) { return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), MerchantPosResponse.class); } - public void deleteMerchantPos(Long merchantPosId) { - String path = "/merchant/v1/merchant-poses/" + merchantPosId; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void deleteMerchantPos(DeleteMerchantPosRequest deleteMerchantPosRequest) { + String path = "/merchant/v1/merchant-poses/" + deleteMerchantPosRequest.getMerchantPosId(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteMerchantPosRequest)); } public MerchantPosCommissionListResponse retrieveMerchantPosCommissions(Long merchantPosId) { diff --git a/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java b/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java index e08f0729..7d7abf97 100644 --- a/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java +++ b/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java @@ -2,6 +2,7 @@ import io.craftgate.net.HttpClient; import io.craftgate.request.CreateProductRequest; +import io.craftgate.request.DeleteProductRequest; import io.craftgate.request.SearchProductsRequest; import io.craftgate.request.UpdateProductRequest; import io.craftgate.request.common.RequestOptions; @@ -32,9 +33,9 @@ public ProductResponse retrieveProduct(Long id) { return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), ProductResponse.class); } - public void deleteProduct(Long id) { - String path = "/craftlink/v1/products/" + id; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void deleteProduct(DeleteProductRequest deleteProductRequest) { + String path = "/craftlink/v1/products/" + deleteProductRequest.getId(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteProductRequest)); } public ProductListResponse searchProducts(SearchProductsRequest searchProductsRequest) { diff --git a/src/main/java/io/craftgate/adapter/PaymentAdapter.java b/src/main/java/io/craftgate/adapter/PaymentAdapter.java index cf7eb404..12d08a4d 100644 --- a/src/main/java/io/craftgate/adapter/PaymentAdapter.java +++ b/src/main/java/io/craftgate/adapter/PaymentAdapter.java @@ -65,9 +65,9 @@ public PaymentResponse retrieveCheckoutPayment(String token) { String path = "/payment/v1/checkout-payments/" + token; return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), PaymentResponse.class); } - public void expireCheckoutPayment(String token) { - String path = "/payment/v1/checkout-payments/" + token; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void expireCheckoutPayment(ExpireCheckoutPaymentRequest expireCheckoutPaymentRequest) { + String path = "/payment/v1/checkout-payments/" + expireCheckoutPaymentRequest.getToken(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, expireCheckoutPaymentRequest)); } public DepositPaymentResponse createDepositPayment(CreateDepositPaymentRequest createDepositPaymentRequest) { @@ -254,14 +254,14 @@ public InitBnplPaymentResponse initBnplPayment(InitBnplPaymentRequest initBnplPa initBnplPaymentRequest, InitBnplPaymentResponse.class); } - public PaymentResponse approveBnplPayment(Long paymentId) { - String path = "/payment/v1/bnpl-payments/" + paymentId + "/approve"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), PaymentResponse.class); + public PaymentResponse approveBnplPayment(ApproveBnplPaymentRequest approveBnplPaymentRequest) { + String path = "/payment/v1/bnpl-payments/" + approveBnplPaymentRequest.getPaymentId() + "/approve"; + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, approveBnplPaymentRequest), PaymentResponse.class); } - public BnplPaymentVerifyResponse verifyBnplPayment(Long paymentId) { - String path = "/payment/v1/bnpl-payments/" + paymentId + "/verify"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), BnplPaymentVerifyResponse.class); + public BnplPaymentVerifyResponse verifyBnplPayment(VerifyBnplPaymentRequest verifyBnplPaymentRequest) { + String path = "/payment/v1/bnpl-payments/" + verifyBnplPaymentRequest.getPaymentId() + "/verify"; + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, verifyBnplPaymentRequest), BnplPaymentVerifyResponse.class); } public BnplLimitInquiryResponse bnplLimitInquiryInit(BnplLimitInquiryRequest bnplLimitInquiryRequest) { diff --git a/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java b/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java index 6561eaf7..953fe8f5 100644 --- a/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java +++ b/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java @@ -2,6 +2,7 @@ import io.craftgate.net.HttpClient; import io.craftgate.request.CreatePaymentTokenRequest; +import io.craftgate.request.DeletePaymentTokenRequest; import io.craftgate.request.common.RequestOptions; import io.craftgate.response.PaymentTokenResponse; @@ -19,8 +20,8 @@ public PaymentTokenResponse createPaymentToken(CreatePaymentTokenRequest createP PaymentTokenResponse.class); } - public void deletePaymentToken(String token) { - String path = "/payment/v1/payment-tokens/" + token; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void deletePaymentToken(DeletePaymentTokenRequest deletePaymentTokenRequest) { + String path = "/payment/v1/payment-tokens/" + deletePaymentTokenRequest.getToken(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deletePaymentTokenRequest)); } } diff --git a/src/main/java/io/craftgate/adapter/SettlementAdapter.java b/src/main/java/io/craftgate/adapter/SettlementAdapter.java index 50a36108..dbbb9283 100644 --- a/src/main/java/io/craftgate/adapter/SettlementAdapter.java +++ b/src/main/java/io/craftgate/adapter/SettlementAdapter.java @@ -3,6 +3,7 @@ import io.craftgate.net.HttpClient; import io.craftgate.request.CreateInstantWalletSettlementRequest; import io.craftgate.request.CreatePayoutAccountRequest; +import io.craftgate.request.DeletePayoutAccountRequest; import io.craftgate.request.SearchPayoutAccountRequest; import io.craftgate.request.UpdatePayoutAccountRequest; import io.craftgate.request.common.RequestOptions; @@ -33,9 +34,9 @@ public void updatePayoutAccount(Long id, UpdatePayoutAccountRequest request) { request, Void.class); } - public void deletePayoutAccount(Long id) { - String path = "/settlement/v1/payout-accounts/" + id; - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions)); + public void deletePayoutAccount(DeletePayoutAccountRequest deletePayoutAccountRequest) { + String path = "/settlement/v1/payout-accounts/" + deletePayoutAccountRequest.getId(); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deletePayoutAccountRequest)); } public PayoutAccountListResponse searchPayoutAccount(SearchPayoutAccountRequest request) { diff --git a/src/main/java/io/craftgate/adapter/WalletAdapter.java b/src/main/java/io/craftgate/adapter/WalletAdapter.java index 4733d41a..327ed6a4 100644 --- a/src/main/java/io/craftgate/adapter/WalletAdapter.java +++ b/src/main/java/io/craftgate/adapter/WalletAdapter.java @@ -80,9 +80,9 @@ public WithdrawResponse createWithdraw(CreateWithdrawRequest request) { return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(request, path, requestOptions), request, WithdrawResponse.class); } - public WithdrawResponse cancelWithdraw(Long withdrawId) { - String path = "/wallet/v1/withdraws/" + withdrawId + "/cancel"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), WithdrawResponse.class); + public WithdrawResponse cancelWithdraw(CancelWithdrawRequest cancelWithdrawRequest) { + String path = "/wallet/v1/withdraws/" + cancelWithdrawRequest.getWithdrawId() + "/cancel"; + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, cancelWithdrawRequest), WithdrawResponse.class); } public WithdrawResponse retrieveWithdraw(Long withdrawId) { diff --git a/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java b/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java index c884f194..5c6cc181 100644 --- a/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java +++ b/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java @@ -2,12 +2,15 @@ import io.craftgate.model.FraudOperation; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; -@Builder +@SuperBuilder @Data -public class AddCardFingerprintFraudValueListRequest { +@EqualsAndHashCode(callSuper = false) +public class AddCardFingerprintFraudValueListRequest extends BaseRequest { String label; Integer durationInSeconds; diff --git a/src/main/java/io/craftgate/request/ApplePayMerchantSessionCreateRequest.java b/src/main/java/io/craftgate/request/ApplePayMerchantSessionCreateRequest.java index c2e8c6e0..164e5997 100644 --- a/src/main/java/io/craftgate/request/ApplePayMerchantSessionCreateRequest.java +++ b/src/main/java/io/craftgate/request/ApplePayMerchantSessionCreateRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class ApplePayMerchantSessionCreateRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class ApplePayMerchantSessionCreateRequest extends BaseRequest { private String merchantIdentifier; private String displayName; diff --git a/src/main/java/io/craftgate/request/ApproveBnplPaymentRequest.java b/src/main/java/io/craftgate/request/ApproveBnplPaymentRequest.java new file mode 100644 index 00000000..dfb2039b --- /dev/null +++ b/src/main/java/io/craftgate/request/ApproveBnplPaymentRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class ApproveBnplPaymentRequest extends BaseRequest { + + private Long paymentId; +} diff --git a/src/main/java/io/craftgate/request/ApprovePaymentTransactionsRequest.java b/src/main/java/io/craftgate/request/ApprovePaymentTransactionsRequest.java index e669e982..4b38442d 100644 --- a/src/main/java/io/craftgate/request/ApprovePaymentTransactionsRequest.java +++ b/src/main/java/io/craftgate/request/ApprovePaymentTransactionsRequest.java @@ -4,10 +4,14 @@ import lombok.Data; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class ApprovePaymentTransactionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class ApprovePaymentTransactionsRequest extends BaseRequest { private Set paymentTransactionIds; diff --git a/src/main/java/io/craftgate/request/BnplLimitInquiryRequest.java b/src/main/java/io/craftgate/request/BnplLimitInquiryRequest.java index 9c25aa3e..4cf9c62e 100644 --- a/src/main/java/io/craftgate/request/BnplLimitInquiryRequest.java +++ b/src/main/java/io/craftgate/request/BnplLimitInquiryRequest.java @@ -2,17 +2,20 @@ import io.craftgate.model.ApmType; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder +@SuperBuilder @AllArgsConstructor @NoArgsConstructor -public class BnplLimitInquiryRequest { +@EqualsAndHashCode(callSuper = false) +public class BnplLimitInquiryRequest extends BaseRequest { private ApmType apmType; private Long merchantApmId; diff --git a/src/main/java/io/craftgate/request/BnplPaymentOfferRequest.java b/src/main/java/io/craftgate/request/BnplPaymentOfferRequest.java index 0bd13f25..d45dc923 100644 --- a/src/main/java/io/craftgate/request/BnplPaymentOfferRequest.java +++ b/src/main/java/io/craftgate/request/BnplPaymentOfferRequest.java @@ -3,16 +3,19 @@ import io.craftgate.model.ApmType; import io.craftgate.model.Currency; import io.craftgate.request.dto.BnplPaymentCartItem; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class BnplPaymentOfferRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class BnplPaymentOfferRequest extends BaseRequest { private ApmType apmType; private Long merchantApmId; diff --git a/src/main/java/io/craftgate/request/CancelWithdrawRequest.java b/src/main/java/io/craftgate/request/CancelWithdrawRequest.java new file mode 100644 index 00000000..82095ab5 --- /dev/null +++ b/src/main/java/io/craftgate/request/CancelWithdrawRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class CancelWithdrawRequest extends BaseRequest { + + private Long withdrawId; +} diff --git a/src/main/java/io/craftgate/request/CheckMasterpassUserRequest.java b/src/main/java/io/craftgate/request/CheckMasterpassUserRequest.java index 36b43fe8..d8881314 100644 --- a/src/main/java/io/craftgate/request/CheckMasterpassUserRequest.java +++ b/src/main/java/io/craftgate/request/CheckMasterpassUserRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CheckMasterpassUserRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CheckMasterpassUserRequest extends BaseRequest { private String masterpassGsmNumber; } diff --git a/src/main/java/io/craftgate/request/CloneCardRequest.java b/src/main/java/io/craftgate/request/CloneCardRequest.java index cce12da4..ddec0877 100644 --- a/src/main/java/io/craftgate/request/CloneCardRequest.java +++ b/src/main/java/io/craftgate/request/CloneCardRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CloneCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CloneCardRequest extends BaseRequest { private String sourceCardUserKey; private String sourceCardToken; diff --git a/src/main/java/io/craftgate/request/CompleteApmPaymentRequest.java b/src/main/java/io/craftgate/request/CompleteApmPaymentRequest.java index eea5d8d5..b2047272 100644 --- a/src/main/java/io/craftgate/request/CompleteApmPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CompleteApmPaymentRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CompleteApmPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CompleteApmPaymentRequest extends BaseRequest { private Long paymentId; private Map additionalParams; diff --git a/src/main/java/io/craftgate/request/CompleteBkmExpressRequest.java b/src/main/java/io/craftgate/request/CompleteBkmExpressRequest.java index 66a610ee..e8aade32 100644 --- a/src/main/java/io/craftgate/request/CompleteBkmExpressRequest.java +++ b/src/main/java/io/craftgate/request/CompleteBkmExpressRequest.java @@ -1,10 +1,14 @@ package io.craftgate.request; import lombok.*; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CompleteBkmExpressRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CompleteBkmExpressRequest extends BaseRequest { private boolean status; private String message; diff --git a/src/main/java/io/craftgate/request/CompletePosApmPaymentRequest.java b/src/main/java/io/craftgate/request/CompletePosApmPaymentRequest.java index 3d299d5b..4984736c 100644 --- a/src/main/java/io/craftgate/request/CompletePosApmPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CompletePosApmPaymentRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CompletePosApmPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CompletePosApmPaymentRequest extends BaseRequest { private Long paymentId; private Map additionalParams; diff --git a/src/main/java/io/craftgate/request/CompleteThreeDSPaymentRequest.java b/src/main/java/io/craftgate/request/CompleteThreeDSPaymentRequest.java index a86716b9..87b179b4 100644 --- a/src/main/java/io/craftgate/request/CompleteThreeDSPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CompleteThreeDSPaymentRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CompleteThreeDSPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CompleteThreeDSPaymentRequest extends BaseRequest { private Long paymentId; } diff --git a/src/main/java/io/craftgate/request/CreateApmPaymentRequest.java b/src/main/java/io/craftgate/request/CreateApmPaymentRequest.java index d65d5923..bdadb170 100644 --- a/src/main/java/io/craftgate/request/CreateApmPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CreateApmPaymentRequest.java @@ -4,15 +4,18 @@ import io.craftgate.model.Currency; import io.craftgate.model.PaymentGroup; import io.craftgate.request.dto.PaymentItem; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateApmPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateApmPaymentRequest extends BaseRequest { private ApmType apmType; private BigDecimal price; diff --git a/src/main/java/io/craftgate/request/CreateDepositPaymentRequest.java b/src/main/java/io/craftgate/request/CreateDepositPaymentRequest.java index 19818d66..021d1265 100644 --- a/src/main/java/io/craftgate/request/CreateDepositPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CreateDepositPaymentRequest.java @@ -3,14 +3,17 @@ import io.craftgate.model.Currency; import io.craftgate.request.dto.Card; import io.craftgate.request.dto.RoutingOptions; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateDepositPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateDepositPaymentRequest extends BaseRequest { private Long buyerMemberId; private BigDecimal price; diff --git a/src/main/java/io/craftgate/request/CreateDepositToCardRequest.java b/src/main/java/io/craftgate/request/CreateDepositToCardRequest.java index 6575b2fd..962f3bf4 100644 --- a/src/main/java/io/craftgate/request/CreateDepositToCardRequest.java +++ b/src/main/java/io/craftgate/request/CreateDepositToCardRequest.java @@ -3,14 +3,17 @@ import io.craftgate.model.Currency; import io.craftgate.request.dto.Card; import io.craftgate.request.dto.DepositToCardPaymentIntegratorDto; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateDepositToCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateDepositToCardRequest extends BaseRequest { private BigDecimal price; private Currency currency; diff --git a/src/main/java/io/craftgate/request/CreateFundTransferDepositPaymentRequest.java b/src/main/java/io/craftgate/request/CreateFundTransferDepositPaymentRequest.java index 9395fe71..816a8ae8 100644 --- a/src/main/java/io/craftgate/request/CreateFundTransferDepositPaymentRequest.java +++ b/src/main/java/io/craftgate/request/CreateFundTransferDepositPaymentRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateFundTransferDepositPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateFundTransferDepositPaymentRequest extends BaseRequest { private BigDecimal price; private Long buyerMemberId; diff --git a/src/main/java/io/craftgate/request/CreateInstantWalletSettlementRequest.java b/src/main/java/io/craftgate/request/CreateInstantWalletSettlementRequest.java index ee483f9c..c555d56c 100644 --- a/src/main/java/io/craftgate/request/CreateInstantWalletSettlementRequest.java +++ b/src/main/java/io/craftgate/request/CreateInstantWalletSettlementRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateInstantWalletSettlementRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateInstantWalletSettlementRequest extends BaseRequest { private Set excludedSubMerchantMemberIds; } \ No newline at end of file diff --git a/src/main/java/io/craftgate/request/CreateMemberRequest.java b/src/main/java/io/craftgate/request/CreateMemberRequest.java index b1cfc8d5..2d544dda 100644 --- a/src/main/java/io/craftgate/request/CreateMemberRequest.java +++ b/src/main/java/io/craftgate/request/CreateMemberRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.MemberType; import io.craftgate.model.SettlementEarningsDestination; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateMemberRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateMemberRequest extends BaseRequest { private String memberExternalId; private String name; diff --git a/src/main/java/io/craftgate/request/CreateMerchantPosRequest.java b/src/main/java/io/craftgate/request/CreateMerchantPosRequest.java index 1e043b2d..c99dc140 100644 --- a/src/main/java/io/craftgate/request/CreateMerchantPosRequest.java +++ b/src/main/java/io/craftgate/request/CreateMerchantPosRequest.java @@ -9,10 +9,14 @@ import lombok.Data; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateMerchantPosRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateMerchantPosRequest extends BaseRequest { @Builder.Default private PosStatus status = PosStatus.AUTOPILOT; diff --git a/src/main/java/io/craftgate/request/CreateMerchantRequest.java b/src/main/java/io/craftgate/request/CreateMerchantRequest.java index 5b28cb34..291149ee 100644 --- a/src/main/java/io/craftgate/request/CreateMerchantRequest.java +++ b/src/main/java/io/craftgate/request/CreateMerchantRequest.java @@ -2,10 +2,13 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data @SuperBuilder -public class CreateMerchantRequest { +@EqualsAndHashCode(callSuper = false) +public class CreateMerchantRequest extends BaseRequest { private String name; private String legalCompanyTitle; diff --git a/src/main/java/io/craftgate/request/CreatePaymentRequest.java b/src/main/java/io/craftgate/request/CreatePaymentRequest.java index 72b45d57..fbc598c7 100644 --- a/src/main/java/io/craftgate/request/CreatePaymentRequest.java +++ b/src/main/java/io/craftgate/request/CreatePaymentRequest.java @@ -14,10 +14,13 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data @SuperBuilder -public class CreatePaymentRequest { +@EqualsAndHashCode(callSuper = false) +public class CreatePaymentRequest extends BaseRequest { protected BigDecimal price; protected BigDecimal paidPrice; diff --git a/src/main/java/io/craftgate/request/CreatePaymentTokenRequest.java b/src/main/java/io/craftgate/request/CreatePaymentTokenRequest.java index 46b4b0fe..429c125a 100644 --- a/src/main/java/io/craftgate/request/CreatePaymentTokenRequest.java +++ b/src/main/java/io/craftgate/request/CreatePaymentTokenRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; +import io.craftgate.request.common.BaseRequest; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; @Data -@Builder -public class CreatePaymentTokenRequest { +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class CreatePaymentTokenRequest extends BaseRequest { private String value; private String issuer; diff --git a/src/main/java/io/craftgate/request/CreatePayoutAccountRequest.java b/src/main/java/io/craftgate/request/CreatePayoutAccountRequest.java index 8dfff5e6..1e079051 100644 --- a/src/main/java/io/craftgate/request/CreatePayoutAccountRequest.java +++ b/src/main/java/io/craftgate/request/CreatePayoutAccountRequest.java @@ -3,12 +3,15 @@ import io.craftgate.model.AccountOwner; import io.craftgate.model.Currency; import io.craftgate.model.PayoutAccountType; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreatePayoutAccountRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreatePayoutAccountRequest extends BaseRequest { private PayoutAccountType type; private String externalAccountId; diff --git a/src/main/java/io/craftgate/request/CreateProductRequest.java b/src/main/java/io/craftgate/request/CreateProductRequest.java index 33205eea..96be2602 100644 --- a/src/main/java/io/craftgate/request/CreateProductRequest.java +++ b/src/main/java/io/craftgate/request/CreateProductRequest.java @@ -1,16 +1,19 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateProductRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateProductRequest extends BaseRequest { private String name; private String channel; diff --git a/src/main/java/io/craftgate/request/CreateRemittanceRequest.java b/src/main/java/io/craftgate/request/CreateRemittanceRequest.java index 11443936..da9a3360 100644 --- a/src/main/java/io/craftgate/request/CreateRemittanceRequest.java +++ b/src/main/java/io/craftgate/request/CreateRemittanceRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.Currency; import io.craftgate.model.RemittanceReasonType; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateRemittanceRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateRemittanceRequest extends BaseRequest { private Long memberId; private BigDecimal price; diff --git a/src/main/java/io/craftgate/request/CreateReportRequest.java b/src/main/java/io/craftgate/request/CreateReportRequest.java index c094c1a2..b6cb711f 100644 --- a/src/main/java/io/craftgate/request/CreateReportRequest.java +++ b/src/main/java/io/craftgate/request/CreateReportRequest.java @@ -8,12 +8,16 @@ import lombok.NoArgsConstructor; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class CreateReportRequest { +@EqualsAndHashCode(callSuper = false) +public class CreateReportRequest extends BaseRequest { private LocalDateTime startDate; diff --git a/src/main/java/io/craftgate/request/CreateWalletRequest.java b/src/main/java/io/craftgate/request/CreateWalletRequest.java index 2bba1ff7..50109d62 100644 --- a/src/main/java/io/craftgate/request/CreateWalletRequest.java +++ b/src/main/java/io/craftgate/request/CreateWalletRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateWalletRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateWalletRequest extends BaseRequest { private BigDecimal negativeAmountLimit; private Currency currency; diff --git a/src/main/java/io/craftgate/request/CreateWithdrawRequest.java b/src/main/java/io/craftgate/request/CreateWithdrawRequest.java index 181f3b2c..efc0b9fe 100644 --- a/src/main/java/io/craftgate/request/CreateWithdrawRequest.java +++ b/src/main/java/io/craftgate/request/CreateWithdrawRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class CreateWithdrawRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class CreateWithdrawRequest extends BaseRequest { private BigDecimal price; private Long memberId; diff --git a/src/main/java/io/craftgate/request/DeleteMerchantPosRequest.java b/src/main/java/io/craftgate/request/DeleteMerchantPosRequest.java new file mode 100644 index 00000000..17065740 --- /dev/null +++ b/src/main/java/io/craftgate/request/DeleteMerchantPosRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class DeleteMerchantPosRequest extends BaseRequest { + + private Long merchantPosId; +} diff --git a/src/main/java/io/craftgate/request/DeletePaymentTokenRequest.java b/src/main/java/io/craftgate/request/DeletePaymentTokenRequest.java new file mode 100644 index 00000000..9deb86ac --- /dev/null +++ b/src/main/java/io/craftgate/request/DeletePaymentTokenRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class DeletePaymentTokenRequest extends BaseRequest { + + private String token; +} diff --git a/src/main/java/io/craftgate/request/DeletePayoutAccountRequest.java b/src/main/java/io/craftgate/request/DeletePayoutAccountRequest.java new file mode 100644 index 00000000..b5d2cabe --- /dev/null +++ b/src/main/java/io/craftgate/request/DeletePayoutAccountRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class DeletePayoutAccountRequest extends BaseRequest { + + private Long id; +} diff --git a/src/main/java/io/craftgate/request/DeleteProductRequest.java b/src/main/java/io/craftgate/request/DeleteProductRequest.java new file mode 100644 index 00000000..62f231bb --- /dev/null +++ b/src/main/java/io/craftgate/request/DeleteProductRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class DeleteProductRequest extends BaseRequest { + + private Long id; +} diff --git a/src/main/java/io/craftgate/request/DeleteStoredCardRequest.java b/src/main/java/io/craftgate/request/DeleteStoredCardRequest.java index 28ca1b34..efbb2205 100644 --- a/src/main/java/io/craftgate/request/DeleteStoredCardRequest.java +++ b/src/main/java/io/craftgate/request/DeleteStoredCardRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class DeleteStoredCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class DeleteStoredCardRequest extends BaseRequest { private String cardUserKey; private String cardToken; diff --git a/src/main/java/io/craftgate/request/DeleteValueListRequest.java b/src/main/java/io/craftgate/request/DeleteValueListRequest.java new file mode 100644 index 00000000..fea39152 --- /dev/null +++ b/src/main/java/io/craftgate/request/DeleteValueListRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class DeleteValueListRequest extends BaseRequest { + + private String listName; +} diff --git a/src/main/java/io/craftgate/request/DisapprovePaymentTransactionsRequest.java b/src/main/java/io/craftgate/request/DisapprovePaymentTransactionsRequest.java index 27970d34..c29730bb 100644 --- a/src/main/java/io/craftgate/request/DisapprovePaymentTransactionsRequest.java +++ b/src/main/java/io/craftgate/request/DisapprovePaymentTransactionsRequest.java @@ -4,10 +4,14 @@ import lombok.Data; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class DisapprovePaymentTransactionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class DisapprovePaymentTransactionsRequest extends BaseRequest { private Set paymentTransactionIds; diff --git a/src/main/java/io/craftgate/request/ExpireCheckoutPaymentRequest.java b/src/main/java/io/craftgate/request/ExpireCheckoutPaymentRequest.java new file mode 100644 index 00000000..61b0142e --- /dev/null +++ b/src/main/java/io/craftgate/request/ExpireCheckoutPaymentRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class ExpireCheckoutPaymentRequest extends BaseRequest { + + private String token; +} diff --git a/src/main/java/io/craftgate/request/FraudValueListRequest.java b/src/main/java/io/craftgate/request/FraudValueListRequest.java index ef3cac9e..8395abf8 100644 --- a/src/main/java/io/craftgate/request/FraudValueListRequest.java +++ b/src/main/java/io/craftgate/request/FraudValueListRequest.java @@ -1,12 +1,15 @@ package io.craftgate.request; import io.craftgate.model.FraudValueType; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class FraudValueListRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class FraudValueListRequest extends BaseRequest { private String listName; private String label; private FraudValueType type; diff --git a/src/main/java/io/craftgate/request/InitApmDepositPaymentRequest.java b/src/main/java/io/craftgate/request/InitApmDepositPaymentRequest.java index 52c859a1..7f338148 100644 --- a/src/main/java/io/craftgate/request/InitApmDepositPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitApmDepositPaymentRequest.java @@ -2,15 +2,18 @@ import io.craftgate.model.ApmType; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitApmDepositPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitApmDepositPaymentRequest extends BaseRequest { private ApmType apmType; private Long merchantApmId; diff --git a/src/main/java/io/craftgate/request/InitApmPaymentRequest.java b/src/main/java/io/craftgate/request/InitApmPaymentRequest.java index 82b1c529..9c5aa487 100644 --- a/src/main/java/io/craftgate/request/InitApmPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitApmPaymentRequest.java @@ -10,10 +10,13 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data @SuperBuilder -public class InitApmPaymentRequest { +@EqualsAndHashCode(callSuper = false) +public class InitApmPaymentRequest extends BaseRequest { private ApmType apmType; private Long merchantApmId; diff --git a/src/main/java/io/craftgate/request/InitBkmExpressRequest.java b/src/main/java/io/craftgate/request/InitBkmExpressRequest.java index 0ffafb31..b532076f 100644 --- a/src/main/java/io/craftgate/request/InitBkmExpressRequest.java +++ b/src/main/java/io/craftgate/request/InitBkmExpressRequest.java @@ -8,10 +8,14 @@ import java.math.BigDecimal; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitBkmExpressRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitBkmExpressRequest extends BaseRequest { private BigDecimal price; private BigDecimal paidPrice; diff --git a/src/main/java/io/craftgate/request/InitCheckoutCardVerifyRequest.java b/src/main/java/io/craftgate/request/InitCheckoutCardVerifyRequest.java index b36fcb0b..2e271931 100644 --- a/src/main/java/io/craftgate/request/InitCheckoutCardVerifyRequest.java +++ b/src/main/java/io/craftgate/request/InitCheckoutCardVerifyRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.CardVerificationAuthType; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitCheckoutCardVerifyRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitCheckoutCardVerifyRequest extends BaseRequest { private BigDecimal verificationPrice; private Currency currency; diff --git a/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java b/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java index 08c96441..5c9c9740 100644 --- a/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java @@ -14,10 +14,14 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitCheckoutPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitCheckoutPaymentRequest extends BaseRequest { protected BigDecimal price; protected BigDecimal paidPrice; diff --git a/src/main/java/io/craftgate/request/InitGarantiPayPaymentRequest.java b/src/main/java/io/craftgate/request/InitGarantiPayPaymentRequest.java index 3e739f2d..8d795995 100644 --- a/src/main/java/io/craftgate/request/InitGarantiPayPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitGarantiPayPaymentRequest.java @@ -4,15 +4,18 @@ import io.craftgate.model.PaymentGroup; import io.craftgate.request.dto.GarantiPayInstallment; import io.craftgate.request.dto.PaymentItem; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitGarantiPayPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitGarantiPayPaymentRequest extends BaseRequest { protected BigDecimal price; protected BigDecimal paidPrice; diff --git a/src/main/java/io/craftgate/request/InitJuzdanPaymentRequest.java b/src/main/java/io/craftgate/request/InitJuzdanPaymentRequest.java index db37b110..91fe0d27 100644 --- a/src/main/java/io/craftgate/request/InitJuzdanPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitJuzdanPaymentRequest.java @@ -9,10 +9,14 @@ import java.math.BigDecimal; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitJuzdanPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitJuzdanPaymentRequest extends BaseRequest { private BigDecimal price; private BigDecimal paidPrice; private Currency currency; diff --git a/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java b/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java index 03bdb00a..e2e443f8 100644 --- a/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitMultiPaymentRequest.java @@ -5,16 +5,19 @@ import io.craftgate.model.PaymentMethod; import io.craftgate.model.PaymentSource; import io.craftgate.request.dto.PaymentItem; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitMultiPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitMultiPaymentRequest extends BaseRequest { private BigDecimal price; private Currency currency; diff --git a/src/main/java/io/craftgate/request/InitPosApmPaymentRequest.java b/src/main/java/io/craftgate/request/InitPosApmPaymentRequest.java index efb4b7cd..80f4f332 100644 --- a/src/main/java/io/craftgate/request/InitPosApmPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitPosApmPaymentRequest.java @@ -13,10 +13,14 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class InitPosApmPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class InitPosApmPaymentRequest extends BaseRequest { private BigDecimal price; private BigDecimal paidPrice; diff --git a/src/main/java/io/craftgate/request/MasterpassPaymentCompleteRequest.java b/src/main/java/io/craftgate/request/MasterpassPaymentCompleteRequest.java index a5c4cd4b..b5d62af4 100644 --- a/src/main/java/io/craftgate/request/MasterpassPaymentCompleteRequest.java +++ b/src/main/java/io/craftgate/request/MasterpassPaymentCompleteRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class MasterpassPaymentCompleteRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MasterpassPaymentCompleteRequest extends BaseRequest { private String referenceId; private String token; } diff --git a/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSCompleteRequest.java b/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSCompleteRequest.java index f5526f4d..0bdd1517 100644 --- a/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSCompleteRequest.java +++ b/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSCompleteRequest.java @@ -1,10 +1,13 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class MasterpassPaymentThreeDSCompleteRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MasterpassPaymentThreeDSCompleteRequest extends BaseRequest { private Long paymentId; } diff --git a/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSInitRequest.java b/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSInitRequest.java index 0f060166..e2f1459a 100644 --- a/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSInitRequest.java +++ b/src/main/java/io/craftgate/request/MasterpassPaymentThreeDSInitRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class MasterpassPaymentThreeDSInitRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MasterpassPaymentThreeDSInitRequest extends BaseRequest { private String referenceId; private String callbackUrl; } diff --git a/src/main/java/io/craftgate/request/MasterpassPaymentTokenGenerateRequest.java b/src/main/java/io/craftgate/request/MasterpassPaymentTokenGenerateRequest.java index 90e90c20..39152589 100644 --- a/src/main/java/io/craftgate/request/MasterpassPaymentTokenGenerateRequest.java +++ b/src/main/java/io/craftgate/request/MasterpassPaymentTokenGenerateRequest.java @@ -3,12 +3,15 @@ import io.craftgate.model.Loyalty; import io.craftgate.model.MasterpassValidationType; import io.craftgate.request.dto.MasterpassCreatePayment; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class MasterpassPaymentTokenGenerateRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MasterpassPaymentTokenGenerateRequest extends BaseRequest { private String msisdn; private String userId; private String binNumber; diff --git a/src/main/java/io/craftgate/request/MasterpassRetrieveLoyaltiesRequest.java b/src/main/java/io/craftgate/request/MasterpassRetrieveLoyaltiesRequest.java index 31fe16ca..3fc1e4af 100644 --- a/src/main/java/io/craftgate/request/MasterpassRetrieveLoyaltiesRequest.java +++ b/src/main/java/io/craftgate/request/MasterpassRetrieveLoyaltiesRequest.java @@ -1,13 +1,16 @@ -package io.craftgate.request; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class MasterpassRetrieveLoyaltiesRequest { - private String msisdn; - private String binNumber; - private String cardName; - private Integer masterpassIntegrationVersion; -} +package io.craftgate.request; + +import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; + +@Data +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MasterpassRetrieveLoyaltiesRequest extends BaseRequest { + private String msisdn; + private String binNumber; + private String cardName; + private Integer masterpassIntegrationVersion; +} diff --git a/src/main/java/io/craftgate/request/MealVoucherCardTokenizationInitRequest.java b/src/main/java/io/craftgate/request/MealVoucherCardTokenizationInitRequest.java index c7e6eb9b..1009a593 100644 --- a/src/main/java/io/craftgate/request/MealVoucherCardTokenizationInitRequest.java +++ b/src/main/java/io/craftgate/request/MealVoucherCardTokenizationInitRequest.java @@ -2,12 +2,15 @@ import io.craftgate.model.ApmType; import io.craftgate.request.dto.MealVoucherCardTokenizationData; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class MealVoucherCardTokenizationInitRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class MealVoucherCardTokenizationInitRequest extends BaseRequest { private ApmType apmType; private MealVoucherCardTokenizationData mealVoucherCardTokenizationData; diff --git a/src/main/java/io/craftgate/request/PostAuthPaymentRequest.java b/src/main/java/io/craftgate/request/PostAuthPaymentRequest.java index d9431d68..86d15f77 100644 --- a/src/main/java/io/craftgate/request/PostAuthPaymentRequest.java +++ b/src/main/java/io/craftgate/request/PostAuthPaymentRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class PostAuthPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class PostAuthPaymentRequest extends BaseRequest { private BigDecimal paidPrice; } diff --git a/src/main/java/io/craftgate/request/RefundPaymentRequest.java b/src/main/java/io/craftgate/request/RefundPaymentRequest.java index ff8bb1dc..50e388d3 100644 --- a/src/main/java/io/craftgate/request/RefundPaymentRequest.java +++ b/src/main/java/io/craftgate/request/RefundPaymentRequest.java @@ -3,10 +3,14 @@ import io.craftgate.model.RefundDestinationType; import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RefundPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RefundPaymentRequest extends BaseRequest { private Long paymentId; private String conversationId; diff --git a/src/main/java/io/craftgate/request/RefundPaymentTransactionMarkAsRefundedRequest.java b/src/main/java/io/craftgate/request/RefundPaymentTransactionMarkAsRefundedRequest.java index 0c0e934e..b4148ec7 100644 --- a/src/main/java/io/craftgate/request/RefundPaymentTransactionMarkAsRefundedRequest.java +++ b/src/main/java/io/craftgate/request/RefundPaymentTransactionMarkAsRefundedRequest.java @@ -5,10 +5,14 @@ import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RefundPaymentTransactionMarkAsRefundedRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RefundPaymentTransactionMarkAsRefundedRequest extends BaseRequest { private Long paymentTransactionId; private String conversationId; diff --git a/src/main/java/io/craftgate/request/RefundPaymentTransactionRequest.java b/src/main/java/io/craftgate/request/RefundPaymentTransactionRequest.java index 30bbad21..6acd81b7 100644 --- a/src/main/java/io/craftgate/request/RefundPaymentTransactionRequest.java +++ b/src/main/java/io/craftgate/request/RefundPaymentTransactionRequest.java @@ -5,10 +5,14 @@ import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RefundPaymentTransactionRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RefundPaymentTransactionRequest extends BaseRequest { private Long paymentTransactionId; private String conversationId; diff --git a/src/main/java/io/craftgate/request/RefundWaitingPaymentRequest.java b/src/main/java/io/craftgate/request/RefundWaitingPaymentRequest.java index 2cce8bed..bf6ecc5c 100644 --- a/src/main/java/io/craftgate/request/RefundWaitingPaymentRequest.java +++ b/src/main/java/io/craftgate/request/RefundWaitingPaymentRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RefundWaitingPaymentRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RefundWaitingPaymentRequest extends BaseRequest { private Long paymentId; } diff --git a/src/main/java/io/craftgate/request/RefundWalletTransactionToCardRequest.java b/src/main/java/io/craftgate/request/RefundWalletTransactionToCardRequest.java index 44585031..aa18827a 100644 --- a/src/main/java/io/craftgate/request/RefundWalletTransactionToCardRequest.java +++ b/src/main/java/io/craftgate/request/RefundWalletTransactionToCardRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RefundWalletTransactionToCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RefundWalletTransactionToCardRequest extends BaseRequest { private BigDecimal refundPrice; } \ No newline at end of file diff --git a/src/main/java/io/craftgate/request/RemoveValueFromValueListRequest.java b/src/main/java/io/craftgate/request/RemoveValueFromValueListRequest.java new file mode 100644 index 00000000..c1ea5b21 --- /dev/null +++ b/src/main/java/io/craftgate/request/RemoveValueFromValueListRequest.java @@ -0,0 +1,15 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class RemoveValueFromValueListRequest extends BaseRequest { + + private String listName; + private String valueId; +} diff --git a/src/main/java/io/craftgate/request/ResetMerchantMemberWalletBalanceRequest.java b/src/main/java/io/craftgate/request/ResetMerchantMemberWalletBalanceRequest.java index fc965f5a..9081828a 100644 --- a/src/main/java/io/craftgate/request/ResetMerchantMemberWalletBalanceRequest.java +++ b/src/main/java/io/craftgate/request/ResetMerchantMemberWalletBalanceRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class ResetMerchantMemberWalletBalanceRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class ResetMerchantMemberWalletBalanceRequest extends BaseRequest { private BigDecimal walletAmount; } \ No newline at end of file diff --git a/src/main/java/io/craftgate/request/RetrieveCardFromIvrRequest.java b/src/main/java/io/craftgate/request/RetrieveCardFromIvrRequest.java index 3c9f02f4..d7cc8b51 100644 --- a/src/main/java/io/craftgate/request/RetrieveCardFromIvrRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveCardFromIvrRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RetrieveCardFromIvrRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveCardFromIvrRequest extends BaseRequest { private String callToken; private String cardUserKey; diff --git a/src/main/java/io/craftgate/request/RetrieveDailyPaymentReportRequest.java b/src/main/java/io/craftgate/request/RetrieveDailyPaymentReportRequest.java index 92f26033..bbbb5d1a 100644 --- a/src/main/java/io/craftgate/request/RetrieveDailyPaymentReportRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveDailyPaymentReportRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.ReportFileType; -import lombok.Builder; import lombok.Data; import java.time.LocalDate; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RetrieveDailyPaymentReportRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveDailyPaymentReportRequest extends BaseRequest { private LocalDate reportDate; private ReportFileType fileType; diff --git a/src/main/java/io/craftgate/request/RetrieveDailyTransactionReportRequest.java b/src/main/java/io/craftgate/request/RetrieveDailyTransactionReportRequest.java index 7f7b0051..9064e3bf 100644 --- a/src/main/java/io/craftgate/request/RetrieveDailyTransactionReportRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveDailyTransactionReportRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.ReportFileType; -import lombok.Builder; import lombok.Data; import java.time.LocalDate; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RetrieveDailyTransactionReportRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveDailyTransactionReportRequest extends BaseRequest { private LocalDate reportDate; private ReportFileType fileType; diff --git a/src/main/java/io/craftgate/request/RetrieveLoyaltiesRequest.java b/src/main/java/io/craftgate/request/RetrieveLoyaltiesRequest.java index af3851f5..5d48eb11 100644 --- a/src/main/java/io/craftgate/request/RetrieveLoyaltiesRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveLoyaltiesRequest.java @@ -1,21 +1,24 @@ -package io.craftgate.request; - -import io.craftgate.request.dto.FraudCheckParameters; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class RetrieveLoyaltiesRequest { - private String cardNumber; - private String expireYear; - private String expireMonth; - private String cvc; - - private String cardUserKey; - private String cardToken; - - private String clientIp; - private String conversationId; - private FraudCheckParameters fraudParams; -} +package io.craftgate.request; + +import io.craftgate.request.dto.FraudCheckParameters; +import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; + +@Data +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveLoyaltiesRequest extends BaseRequest { + private String cardNumber; + private String expireYear; + private String expireMonth; + private String cvc; + + private String cardUserKey; + private String cardToken; + + private String clientIp; + private String conversationId; + private FraudCheckParameters fraudParams; +} diff --git a/src/main/java/io/craftgate/request/RetrieveProviderCardRequest.java b/src/main/java/io/craftgate/request/RetrieveProviderCardRequest.java index d6866909..47d53d42 100644 --- a/src/main/java/io/craftgate/request/RetrieveProviderCardRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveProviderCardRequest.java @@ -2,12 +2,15 @@ import io.craftgate.model.CardProvider; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RetrieveProviderCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveProviderCardRequest extends BaseRequest { private String providerCardToken; private String externalId; diff --git a/src/main/java/io/craftgate/request/RetrieveReportRequest.java b/src/main/java/io/craftgate/request/RetrieveReportRequest.java index 0f35afb5..4c78e3a5 100644 --- a/src/main/java/io/craftgate/request/RetrieveReportRequest.java +++ b/src/main/java/io/craftgate/request/RetrieveReportRequest.java @@ -2,12 +2,15 @@ import io.craftgate.model.ReportFileType; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class RetrieveReportRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class RetrieveReportRequest extends BaseRequest { private ReportFileType fileType; } diff --git a/src/main/java/io/craftgate/request/SearchBankAccountTrackingRecordsRequest.java b/src/main/java/io/craftgate/request/SearchBankAccountTrackingRecordsRequest.java index fbb279c0..108bc3a0 100644 --- a/src/main/java/io/craftgate/request/SearchBankAccountTrackingRecordsRequest.java +++ b/src/main/java/io/craftgate/request/SearchBankAccountTrackingRecordsRequest.java @@ -5,10 +5,14 @@ import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchBankAccountTrackingRecordsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchBankAccountTrackingRecordsRequest extends BaseRequest { private Currency currency; private String description; diff --git a/src/main/java/io/craftgate/request/SearchFraudChecksRequest.java b/src/main/java/io/craftgate/request/SearchFraudChecksRequest.java index ee4ab22f..3265222a 100644 --- a/src/main/java/io/craftgate/request/SearchFraudChecksRequest.java +++ b/src/main/java/io/craftgate/request/SearchFraudChecksRequest.java @@ -3,14 +3,17 @@ import io.craftgate.model.FraudAction; import io.craftgate.model.FraudCheckStatus; import io.craftgate.model.PaymentStatus; -import lombok.Builder; import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchFraudChecksRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchFraudChecksRequest extends BaseRequest { private Integer page; private Integer size; private FraudAction action; diff --git a/src/main/java/io/craftgate/request/SearchFraudRuleRequest.java b/src/main/java/io/craftgate/request/SearchFraudRuleRequest.java index f6a95e09..3f0babcd 100644 --- a/src/main/java/io/craftgate/request/SearchFraudRuleRequest.java +++ b/src/main/java/io/craftgate/request/SearchFraudRuleRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.FraudAction; import io.craftgate.model.FraudOperation; -import lombok.Builder; import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchFraudRuleRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchFraudRuleRequest extends BaseRequest { private Integer page; private Integer size; diff --git a/src/main/java/io/craftgate/request/SearchInstallmentsRequest.java b/src/main/java/io/craftgate/request/SearchInstallmentsRequest.java index bbf6cf75..faf03119 100644 --- a/src/main/java/io/craftgate/request/SearchInstallmentsRequest.java +++ b/src/main/java/io/craftgate/request/SearchInstallmentsRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchInstallmentsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchInstallmentsRequest extends BaseRequest { private String binNumber; private BigDecimal price; diff --git a/src/main/java/io/craftgate/request/SearchMembersRequest.java b/src/main/java/io/craftgate/request/SearchMembersRequest.java index 87199741..1316ce56 100644 --- a/src/main/java/io/craftgate/request/SearchMembersRequest.java +++ b/src/main/java/io/craftgate/request/SearchMembersRequest.java @@ -5,10 +5,14 @@ import lombok.Data; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchMembersRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchMembersRequest extends BaseRequest { @Builder.Default private Integer page = 0; diff --git a/src/main/java/io/craftgate/request/SearchMerchantPosRequest.java b/src/main/java/io/craftgate/request/SearchMerchantPosRequest.java index ed84ac5e..c5f34394 100644 --- a/src/main/java/io/craftgate/request/SearchMerchantPosRequest.java +++ b/src/main/java/io/craftgate/request/SearchMerchantPosRequest.java @@ -1,12 +1,15 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchMerchantPosRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchMerchantPosRequest extends BaseRequest { private String name; private String alias; private Currency currency; diff --git a/src/main/java/io/craftgate/request/SearchPaymentRefundsRequest.java b/src/main/java/io/craftgate/request/SearchPaymentRefundsRequest.java index 9daf8a2b..2f5e8bcb 100644 --- a/src/main/java/io/craftgate/request/SearchPaymentRefundsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPaymentRefundsRequest.java @@ -2,15 +2,18 @@ import io.craftgate.model.Currency; import io.craftgate.model.RefundStatus; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPaymentRefundsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPaymentRefundsRequest extends BaseRequest { private Integer page; private Integer size; diff --git a/src/main/java/io/craftgate/request/SearchPaymentTransactionRefundsRequest.java b/src/main/java/io/craftgate/request/SearchPaymentTransactionRefundsRequest.java index 32bfb4b7..8b13bb3f 100644 --- a/src/main/java/io/craftgate/request/SearchPaymentTransactionRefundsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPaymentTransactionRefundsRequest.java @@ -2,15 +2,18 @@ import io.craftgate.model.Currency; import io.craftgate.model.RefundStatus; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPaymentTransactionRefundsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPaymentTransactionRefundsRequest extends BaseRequest { private Integer page; private Integer size; diff --git a/src/main/java/io/craftgate/request/SearchPaymentsRequest.java b/src/main/java/io/craftgate/request/SearchPaymentsRequest.java index 7d1de57d..6fabe3d5 100644 --- a/src/main/java/io/craftgate/request/SearchPaymentsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPaymentsRequest.java @@ -1,15 +1,18 @@ package io.craftgate.request; import io.craftgate.model.*; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPaymentsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPaymentsRequest extends BaseRequest { private Integer page; private Integer size; diff --git a/src/main/java/io/craftgate/request/SearchPayoutAccountRequest.java b/src/main/java/io/craftgate/request/SearchPayoutAccountRequest.java index 7bd55968..0d17ed56 100644 --- a/src/main/java/io/craftgate/request/SearchPayoutAccountRequest.java +++ b/src/main/java/io/craftgate/request/SearchPayoutAccountRequest.java @@ -4,9 +4,13 @@ import io.craftgate.model.Currency; import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPayoutAccountRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPayoutAccountRequest extends BaseRequest { private Currency currency; private AccountOwner accountOwner; diff --git a/src/main/java/io/craftgate/request/SearchPayoutBouncedTransactionsRequest.java b/src/main/java/io/craftgate/request/SearchPayoutBouncedTransactionsRequest.java index 373e19b0..da0a9d63 100644 --- a/src/main/java/io/craftgate/request/SearchPayoutBouncedTransactionsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPayoutBouncedTransactionsRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPayoutBouncedTransactionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPayoutBouncedTransactionsRequest extends BaseRequest { private LocalDateTime endDate; private LocalDateTime startDate; diff --git a/src/main/java/io/craftgate/request/SearchPayoutCompletedTransactionsRequest.java b/src/main/java/io/craftgate/request/SearchPayoutCompletedTransactionsRequest.java index 65955d6a..791228b5 100644 --- a/src/main/java/io/craftgate/request/SearchPayoutCompletedTransactionsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPayoutCompletedTransactionsRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; import io.craftgate.model.SettlementType; -import lombok.Builder; import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPayoutCompletedTransactionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPayoutCompletedTransactionsRequest extends BaseRequest { private Long settlementFileId; private SettlementType settlementType; diff --git a/src/main/java/io/craftgate/request/SearchPayoutRowsRequest.java b/src/main/java/io/craftgate/request/SearchPayoutRowsRequest.java index 35406178..7c93adb6 100644 --- a/src/main/java/io/craftgate/request/SearchPayoutRowsRequest.java +++ b/src/main/java/io/craftgate/request/SearchPayoutRowsRequest.java @@ -5,10 +5,14 @@ import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchPayoutRowsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchPayoutRowsRequest extends BaseRequest { @Builder.Default private Integer page = 0; diff --git a/src/main/java/io/craftgate/request/SearchProductsRequest.java b/src/main/java/io/craftgate/request/SearchProductsRequest.java index 072897f1..b9b6097f 100644 --- a/src/main/java/io/craftgate/request/SearchProductsRequest.java +++ b/src/main/java/io/craftgate/request/SearchProductsRequest.java @@ -1,15 +1,18 @@ package io.craftgate.request; import io.craftgate.model.Currency; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchProductsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchProductsRequest extends BaseRequest { private Long id; private String name; diff --git a/src/main/java/io/craftgate/request/SearchStoredCardsRequest.java b/src/main/java/io/craftgate/request/SearchStoredCardsRequest.java index ff76ca94..a89a0e92 100644 --- a/src/main/java/io/craftgate/request/SearchStoredCardsRequest.java +++ b/src/main/java/io/craftgate/request/SearchStoredCardsRequest.java @@ -7,10 +7,14 @@ import lombok.Data; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchStoredCardsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchStoredCardsRequest extends BaseRequest { private String cardAlias; private String cardBrand; diff --git a/src/main/java/io/craftgate/request/SearchWalletTransactionsRequest.java b/src/main/java/io/craftgate/request/SearchWalletTransactionsRequest.java index 03ec4b10..4ea397da 100644 --- a/src/main/java/io/craftgate/request/SearchWalletTransactionsRequest.java +++ b/src/main/java/io/craftgate/request/SearchWalletTransactionsRequest.java @@ -7,10 +7,14 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchWalletTransactionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchWalletTransactionsRequest extends BaseRequest { @Builder.Default private Integer page = 0; diff --git a/src/main/java/io/craftgate/request/SearchWithdrawsRequest.java b/src/main/java/io/craftgate/request/SearchWithdrawsRequest.java index d738b62e..7abfdabb 100644 --- a/src/main/java/io/craftgate/request/SearchWithdrawsRequest.java +++ b/src/main/java/io/craftgate/request/SearchWithdrawsRequest.java @@ -7,10 +7,14 @@ import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class SearchWithdrawsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class SearchWithdrawsRequest extends BaseRequest { private Long memberId; private Currency currency; diff --git a/src/main/java/io/craftgate/request/StoreCardRequest.java b/src/main/java/io/craftgate/request/StoreCardRequest.java index 3b0577e2..45f73891 100644 --- a/src/main/java/io/craftgate/request/StoreCardRequest.java +++ b/src/main/java/io/craftgate/request/StoreCardRequest.java @@ -1,12 +1,15 @@ package io.craftgate.request; import io.craftgate.request.dto.EncryptedCard; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class StoreCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class StoreCardRequest extends BaseRequest { private String cardHolderName; private String cardNumber; diff --git a/src/main/java/io/craftgate/request/UpdateCardRequest.java b/src/main/java/io/craftgate/request/UpdateCardRequest.java index 95c5a85a..a7f53218 100644 --- a/src/main/java/io/craftgate/request/UpdateCardRequest.java +++ b/src/main/java/io/craftgate/request/UpdateCardRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateCardRequest extends BaseRequest { private String cardUserKey; private String cardToken; diff --git a/src/main/java/io/craftgate/request/UpdateFraudCheckRequest.java b/src/main/java/io/craftgate/request/UpdateFraudCheckRequest.java index 0dec08f9..d369c326 100644 --- a/src/main/java/io/craftgate/request/UpdateFraudCheckRequest.java +++ b/src/main/java/io/craftgate/request/UpdateFraudCheckRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; import io.craftgate.model.FraudCheckStatus; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateFraudCheckRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateFraudCheckRequest extends BaseRequest { private FraudCheckStatus checkStatus; } diff --git a/src/main/java/io/craftgate/request/UpdateMemberRequest.java b/src/main/java/io/craftgate/request/UpdateMemberRequest.java index b002c914..33fc0af7 100644 --- a/src/main/java/io/craftgate/request/UpdateMemberRequest.java +++ b/src/main/java/io/craftgate/request/UpdateMemberRequest.java @@ -2,14 +2,17 @@ import io.craftgate.model.MemberType; import io.craftgate.model.SettlementEarningsDestination; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateMemberRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateMemberRequest extends BaseRequest { private String name; private String address; diff --git a/src/main/java/io/craftgate/request/UpdateMerchantPosCommissionsRequest.java b/src/main/java/io/craftgate/request/UpdateMerchantPosCommissionsRequest.java index 976fa7b1..70edfab7 100644 --- a/src/main/java/io/craftgate/request/UpdateMerchantPosCommissionsRequest.java +++ b/src/main/java/io/craftgate/request/UpdateMerchantPosCommissionsRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; import io.craftgate.request.dto.UpdateMerchantPosCommission; -import lombok.Builder; import lombok.Data; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateMerchantPosCommissionsRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateMerchantPosCommissionsRequest extends BaseRequest { private List commissions; diff --git a/src/main/java/io/craftgate/request/UpdateMerchantPosRequest.java b/src/main/java/io/craftgate/request/UpdateMerchantPosRequest.java index 24ec0b59..9df970df 100644 --- a/src/main/java/io/craftgate/request/UpdateMerchantPosRequest.java +++ b/src/main/java/io/craftgate/request/UpdateMerchantPosRequest.java @@ -3,14 +3,17 @@ import io.craftgate.model.CardAssociation; import io.craftgate.model.PaymentAuthenticationType; import io.craftgate.request.dto.UpdateMerchantPosUser; -import lombok.Builder; import lombok.Data; import java.util.List; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateMerchantPosRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateMerchantPosRequest extends BaseRequest { private String name; private String hostname; private String clientId; diff --git a/src/main/java/io/craftgate/request/UpdateMerchantPosStatusRequest.java b/src/main/java/io/craftgate/request/UpdateMerchantPosStatusRequest.java new file mode 100644 index 00000000..f285cce8 --- /dev/null +++ b/src/main/java/io/craftgate/request/UpdateMerchantPosStatusRequest.java @@ -0,0 +1,16 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import io.craftgate.model.PosStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class UpdateMerchantPosStatusRequest extends BaseRequest { + + private Long merchantPosId; + private PosStatus posStatus; +} diff --git a/src/main/java/io/craftgate/request/UpdatePaymentTransactionRequest.java b/src/main/java/io/craftgate/request/UpdatePaymentTransactionRequest.java index 25c8533a..c9e34622 100644 --- a/src/main/java/io/craftgate/request/UpdatePaymentTransactionRequest.java +++ b/src/main/java/io/craftgate/request/UpdatePaymentTransactionRequest.java @@ -1,14 +1,17 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdatePaymentTransactionRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdatePaymentTransactionRequest extends BaseRequest { private Long paymentTransactionId; private Long subMerchantMemberId; diff --git a/src/main/java/io/craftgate/request/UpdatePayoutAccountRequest.java b/src/main/java/io/craftgate/request/UpdatePayoutAccountRequest.java index 92797d13..39bacac6 100644 --- a/src/main/java/io/craftgate/request/UpdatePayoutAccountRequest.java +++ b/src/main/java/io/craftgate/request/UpdatePayoutAccountRequest.java @@ -1,11 +1,14 @@ package io.craftgate.request; import io.craftgate.model.PayoutAccountType; -import lombok.Builder; import lombok.Data; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdatePayoutAccountRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdatePayoutAccountRequest extends BaseRequest { private PayoutAccountType type; private String externalAccountId; diff --git a/src/main/java/io/craftgate/request/UpdateProductRequest.java b/src/main/java/io/craftgate/request/UpdateProductRequest.java index 2586e34a..d72aca59 100644 --- a/src/main/java/io/craftgate/request/UpdateProductRequest.java +++ b/src/main/java/io/craftgate/request/UpdateProductRequest.java @@ -2,16 +2,19 @@ import io.craftgate.model.Currency; import io.craftgate.model.Status; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Set; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateProductRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateProductRequest extends BaseRequest { private String name; private String channel; diff --git a/src/main/java/io/craftgate/request/UpdateWalletRequest.java b/src/main/java/io/craftgate/request/UpdateWalletRequest.java index 4e897f98..1e84ff30 100644 --- a/src/main/java/io/craftgate/request/UpdateWalletRequest.java +++ b/src/main/java/io/craftgate/request/UpdateWalletRequest.java @@ -1,13 +1,16 @@ package io.craftgate.request; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class UpdateWalletRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class UpdateWalletRequest extends BaseRequest { private BigDecimal negativeAmountLimit; } \ No newline at end of file diff --git a/src/main/java/io/craftgate/request/VerifyBnplPaymentRequest.java b/src/main/java/io/craftgate/request/VerifyBnplPaymentRequest.java new file mode 100644 index 00000000..8c7cbb86 --- /dev/null +++ b/src/main/java/io/craftgate/request/VerifyBnplPaymentRequest.java @@ -0,0 +1,14 @@ +package io.craftgate.request; + +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class VerifyBnplPaymentRequest extends BaseRequest { + + private Long paymentId; +} diff --git a/src/main/java/io/craftgate/request/VerifyCardRequest.java b/src/main/java/io/craftgate/request/VerifyCardRequest.java index 0909d971..db39da12 100644 --- a/src/main/java/io/craftgate/request/VerifyCardRequest.java +++ b/src/main/java/io/craftgate/request/VerifyCardRequest.java @@ -3,14 +3,17 @@ import io.craftgate.model.CardVerificationAuthType; import io.craftgate.model.Currency; import io.craftgate.request.dto.VerifyCard; -import lombok.Builder; import lombok.Data; import java.math.BigDecimal; +import lombok.experimental.SuperBuilder; +import lombok.EqualsAndHashCode; +import io.craftgate.request.common.BaseRequest; @Data -@Builder -public class VerifyCardRequest { +@SuperBuilder +@EqualsAndHashCode(callSuper = false) +public class VerifyCardRequest extends BaseRequest { private VerifyCard card; private CardVerificationAuthType paymentAuthenticationType; diff --git a/src/main/java/io/craftgate/request/common/BaseRequest.java b/src/main/java/io/craftgate/request/common/BaseRequest.java new file mode 100644 index 00000000..e6afdc45 --- /dev/null +++ b/src/main/java/io/craftgate/request/common/BaseRequest.java @@ -0,0 +1,28 @@ +package io.craftgate.request.common; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * Base class for request objects sent to the Craftgate API. + * + *

Holds request-scoped options that are transmitted as headers rather than in the + * request body. Fields declared here are {@code transient} so that they are excluded from + * both the JSON body and the request signature. The class is intentionally generic so that + * other request-scoped options (e.g. a per-request language override) can be added here in + * the future and reused by any request that extends it. + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class BaseRequest { + + /** + * Optional idempotency key. When set on a request to a mutating endpoint (POST/PUT/DELETE), + * it is sent as the {@code x-idempotency-key} header so the operation can be safely retried. + */ + private transient String idempotencyKey; +} diff --git a/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java new file mode 100644 index 00000000..4392587d --- /dev/null +++ b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java @@ -0,0 +1,113 @@ +package io.craftgate.adapter; + +import com.google.gson.Gson; +import io.craftgate.request.CreatePaymentTokenRequest; +import io.craftgate.request.DeleteProductRequest; +import io.craftgate.request.SearchProductsRequest; +import io.craftgate.request.common.Jsons; +import io.craftgate.request.common.RequestOptions; +import io.craftgate.request.common.RequestQueryParamsBuilder; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class BaseRequestFoundationTest { + + private static final String IDEMPOTENCY_KEY_HEADER_NAME = "x-idempotency-key"; + + private final RequestOptions requestOptions = RequestOptions.builder() + .apiKey("api-key") + .secretKey("secret-key") + .baseUrl("https://sandbox-api.craftgate.io") + .build(); + + private final PaymentTokenAdapter bodyAdapter = new PaymentTokenAdapter(requestOptions); + private final PayByLinkAdapter wrapperAdapter = new PayByLinkAdapter(requestOptions); + + @Test + void superbuilder_includes_inherited_idempotency_key() { + CreatePaymentTokenRequest request = CreatePaymentTokenRequest.builder() + .value("card-value") + .issuer("issuer") + .idempotencyKey("idempotency-key-1") + .build(); + + assertEquals("idempotency-key-1", request.getIdempotencyKey()); + assertEquals("card-value", request.getValue()); + } + + @Test + void idempotency_key_is_excluded_from_serialized_body_and_signature() { + Gson gson = Jsons.getGson(); + CreatePaymentTokenRequest request = CreatePaymentTokenRequest.builder() + .value("card-value") + .idempotencyKey("idempotency-key-1") + .build(); + + String json = gson.toJson(request); + + assertTrue(json.contains("card-value")); + assertFalse(json.contains("idempotencyKey")); + assertFalse(json.contains("idempotency-key-1")); + } + + @Test + void idempotency_key_does_not_leak_into_query_params_of_read_requests() { + SearchProductsRequest request = SearchProductsRequest.builder() + .name("A new Product") + .idempotencyKey("idempotency-key-1") + .build(); + + String query = RequestQueryParamsBuilder.buildQueryParam(request); + + assertTrue(query.contains("name=A")); + assertFalse(query.contains("idempotencyKey")); + assertFalse(query.contains("idempotency-key-1")); + } + + @Test + void body_request_sends_idempotency_key_header() { + CreatePaymentTokenRequest request = CreatePaymentTokenRequest.builder() + .value("card-value") + .idempotencyKey("idempotency-key-1") + .build(); + + Map headers = bodyAdapter.createHeaders(request, "/payment/v1/payment-tokens", requestOptions); + + assertEquals("idempotency-key-1", headers.get(IDEMPOTENCY_KEY_HEADER_NAME)); + } + + @Test + void body_request_without_key_sends_no_header() { + CreatePaymentTokenRequest request = CreatePaymentTokenRequest.builder().value("card-value").build(); + + Map headers = bodyAdapter.createHeaders(request, "/payment/v1/payment-tokens", requestOptions); + + assertFalse(headers.containsKey(IDEMPOTENCY_KEY_HEADER_NAME)); + } + + @Test + void bodyless_wrapper_sends_idempotency_key_header() { + DeleteProductRequest request = DeleteProductRequest.builder() + .id(42L) + .idempotencyKey("idempotency-key-1") + .build(); + + Map headers = wrapperAdapter.createHeaders("/craftlink/v1/products/42", requestOptions, request); + + assertEquals("idempotency-key-1", headers.get(IDEMPOTENCY_KEY_HEADER_NAME)); + } + + @Test + void bodyless_wrapper_without_key_sends_no_header() { + DeleteProductRequest request = DeleteProductRequest.builder().id(42L).build(); + + Map headers = wrapperAdapter.createHeaders("/craftlink/v1/products/42", requestOptions, request); + + assertFalse(headers.containsKey(IDEMPOTENCY_KEY_HEADER_NAME)); + } +} diff --git a/src/test/java/io/craftgate/sample/BnplPaymentSample.java b/src/test/java/io/craftgate/sample/BnplPaymentSample.java index e2ad9f7d..c990894e 100644 --- a/src/test/java/io/craftgate/sample/BnplPaymentSample.java +++ b/src/test/java/io/craftgate/sample/BnplPaymentSample.java @@ -5,9 +5,11 @@ import io.craftgate.model.BnplCartItemType; import io.craftgate.model.Currency; import io.craftgate.model.PaymentGroup; +import io.craftgate.request.ApproveBnplPaymentRequest; import io.craftgate.request.BnplPaymentOfferRequest; import io.craftgate.request.BnplLimitInquiryRequest; import io.craftgate.request.InitBnplPaymentRequest; +import io.craftgate.request.VerifyBnplPaymentRequest; import io.craftgate.request.dto.BnplPaymentCartItem; import io.craftgate.request.dto.PaymentItem; import io.craftgate.response.*; @@ -186,14 +188,18 @@ void init_tom_finance_bnpl_payment() { @Test void approve_bnpl_payment() { Long paymentId = 1L; - PaymentResponse response = craftgate.payment().approveBnplPayment(paymentId); + PaymentResponse response = craftgate.payment().approveBnplPayment(ApproveBnplPaymentRequest.builder() + .paymentId(paymentId) + .build()); assertNotNull(response.getId()); } @Test void verify_bnpl_payment() { Long paymentId = 1L; - BnplPaymentVerifyResponse response = craftgate.payment().verifyBnplPayment(paymentId); + BnplPaymentVerifyResponse response = craftgate.payment().verifyBnplPayment(VerifyBnplPaymentRequest.builder() + .paymentId(paymentId) + .build()); assertNotNull(response.getPaymentStatus()); } } diff --git a/src/test/java/io/craftgate/sample/FraudSample.java b/src/test/java/io/craftgate/sample/FraudSample.java index 193dfa00..e665d207 100644 --- a/src/test/java/io/craftgate/sample/FraudSample.java +++ b/src/test/java/io/craftgate/sample/FraudSample.java @@ -6,7 +6,9 @@ import io.craftgate.model.FraudOperation; import io.craftgate.model.FraudValueType; import io.craftgate.request.AddCardFingerprintFraudValueListRequest; +import io.craftgate.request.DeleteValueListRequest; import io.craftgate.request.FraudValueListRequest; +import io.craftgate.request.RemoveValueFromValueListRequest; import io.craftgate.request.SearchFraudChecksRequest; import io.craftgate.request.SearchFraudRuleRequest; import io.craftgate.response.FraudAllValueListsResponse; @@ -108,12 +110,17 @@ void add_card_fingerprint_to_fraud_value_list() { @Test void remove_value_from_fraud_value_list() { - craftgate.fraud().removeValueFromValueList("ipList", "da0150ff-10be-4cb3-b66e-efcdaaff8233"); + craftgate.fraud().removeValueFromValueList(RemoveValueFromValueListRequest.builder() + .listName("ipList") + .valueId("da0150ff-10be-4cb3-b66e-efcdaaff8233") + .build()); } @Test void delete_fraud_value_list() { - craftgate.fraud().deleteValueList("ipList"); + craftgate.fraud().deleteValueList(DeleteValueListRequest.builder() + .listName("ipList") + .build()); } diff --git a/src/test/java/io/craftgate/sample/MerchantSample.java b/src/test/java/io/craftgate/sample/MerchantSample.java index df6472c4..c3956258 100644 --- a/src/test/java/io/craftgate/sample/MerchantSample.java +++ b/src/test/java/io/craftgate/sample/MerchantSample.java @@ -3,9 +3,11 @@ import io.craftgate.Craftgate; import io.craftgate.model.*; import io.craftgate.request.CreateMerchantPosRequest; +import io.craftgate.request.DeleteMerchantPosRequest; import io.craftgate.request.SearchMerchantPosRequest; import io.craftgate.request.UpdateMerchantPosCommissionsRequest; import io.craftgate.request.UpdateMerchantPosRequest; +import io.craftgate.request.UpdateMerchantPosStatusRequest; import io.craftgate.request.dto.CreateMerchantPosUser; import io.craftgate.request.dto.UpdateMerchantPosCommission; import io.craftgate.request.dto.UpdateMerchantPosUser; @@ -141,7 +143,10 @@ void update_merchant_pos_status() { Long merchantPosId = 1L; PosStatus posStatus = PosStatus.PASSIVE; - craftgate.merchant().updateMerchantPosStatus(merchantPosId, posStatus); + craftgate.merchant().updateMerchantPosStatus(UpdateMerchantPosStatusRequest.builder() + .merchantPosId(merchantPosId) + .posStatus(posStatus) + .build()); } @Test @@ -157,7 +162,9 @@ void retrieve_merchant_pos() { void delete_merchant_pos() { Long merchantPosId = 1L; - craftgate.merchant().deleteMerchantPos(merchantPosId); + craftgate.merchant().deleteMerchantPos(DeleteMerchantPosRequest.builder() + .merchantPosId(merchantPosId) + .build()); } @Test diff --git a/src/test/java/io/craftgate/sample/PayByLinkSample.java b/src/test/java/io/craftgate/sample/PayByLinkSample.java index a3c7c1d7..e291ef21 100644 --- a/src/test/java/io/craftgate/sample/PayByLinkSample.java +++ b/src/test/java/io/craftgate/sample/PayByLinkSample.java @@ -4,6 +4,7 @@ import io.craftgate.model.Currency; import io.craftgate.model.Status; import io.craftgate.request.CreateProductRequest; +import io.craftgate.request.DeleteProductRequest; import io.craftgate.request.SearchProductsRequest; import io.craftgate.request.UpdateProductRequest; import io.craftgate.response.ProductListResponse; @@ -100,7 +101,9 @@ void retrieve_product() { void delete_product() { Long productId = 1L; - craftgate.payByLink().deleteProduct(productId); + craftgate.payByLink().deleteProduct(DeleteProductRequest.builder() + .id(productId) + .build()); } @Test diff --git a/src/test/java/io/craftgate/sample/PaymentSample.java b/src/test/java/io/craftgate/sample/PaymentSample.java index c9a0693c..f2b4a4b1 100644 --- a/src/test/java/io/craftgate/sample/PaymentSample.java +++ b/src/test/java/io/craftgate/sample/PaymentSample.java @@ -17,6 +17,42 @@ public class PaymentSample { private final Craftgate craftgate = new Craftgate("api-key", "secret-key", "https://sandbox-api.craftgate.io"); + @Test + void create_payment_with_idempotency_key() { + CreatePaymentRequest request = CreatePaymentRequest.builder() + .price(BigDecimal.valueOf(100)) + .paidPrice(BigDecimal.valueOf(100)) + .installment(1) + .currency(Currency.TRY) + .paymentGroup(PaymentGroup.LISTING_OR_SUBSCRIPTION) + .paymentPhase(PaymentPhase.AUTH) + .idempotencyKey(UUID.randomUUID().toString()) + .card(Card.builder() + .cardHolderName("Haluk Demir") + .cardNumber("5258640000000001") + .expireYear("2044") + .expireMonth("07") + .cvc("000") + .build()) + .items(Collections.singletonList(PaymentItem.builder() + .name("item 1") + .externalId(UUID.randomUUID().toString()) + .price(BigDecimal.valueOf(100)) + .build())) + .build(); + + PaymentResponse response = craftgate.payment().createPayment(request); + assertNotNull(response.getId()); + } + + @Test + void expire_checkout_payment_with_idempotency_key() { + craftgate.payment().expireCheckoutPayment(ExpireCheckoutPaymentRequest.builder() + .token("456d1297-908e-4bd6-a13b-4be31a6e47d5") + .idempotencyKey(UUID.randomUUID().toString()) + .build()); + } + @Test void create_payment() { List items = new ArrayList<>(); @@ -846,7 +882,9 @@ void retrieve_checkout_payment() { void expire_checkout_payment() { String token = "456d1297-908e-4bd6-a13b-4be31a6e47d5"; - craftgate.payment().expireCheckoutPayment(token); + craftgate.payment().expireCheckoutPayment(ExpireCheckoutPaymentRequest.builder() + .token(token) + .build()); } @Test diff --git a/src/test/java/io/craftgate/sample/PaymentTokenSample.java b/src/test/java/io/craftgate/sample/PaymentTokenSample.java index 80733a05..d672cf42 100644 --- a/src/test/java/io/craftgate/sample/PaymentTokenSample.java +++ b/src/test/java/io/craftgate/sample/PaymentTokenSample.java @@ -3,6 +3,7 @@ import io.craftgate.Craftgate; import io.craftgate.model.ApmType; import io.craftgate.request.CreatePaymentTokenRequest; +import io.craftgate.request.DeletePaymentTokenRequest; import io.craftgate.response.PaymentTokenResponse; import org.junit.jupiter.api.Test; @@ -30,6 +31,8 @@ void create_payment_token() { void delete_payment_token() { String token = "token-to-be-deleted"; - craftgate.paymentTokenAdapter().deletePaymentToken(token); + craftgate.paymentTokenAdapter().deletePaymentToken(DeletePaymentTokenRequest.builder() + .token(token) + .build()); } } diff --git a/src/test/java/io/craftgate/sample/SettlementSample.java b/src/test/java/io/craftgate/sample/SettlementSample.java index 6ced9d46..29002850 100644 --- a/src/test/java/io/craftgate/sample/SettlementSample.java +++ b/src/test/java/io/craftgate/sample/SettlementSample.java @@ -6,6 +6,7 @@ import io.craftgate.model.PayoutAccountType; import io.craftgate.request.CreateInstantWalletSettlementRequest; import io.craftgate.request.CreatePayoutAccountRequest; +import io.craftgate.request.DeletePayoutAccountRequest; import io.craftgate.request.SearchPayoutAccountRequest; import io.craftgate.request.UpdatePayoutAccountRequest; import io.craftgate.response.PayoutAccountListResponse; @@ -80,6 +81,8 @@ void search_payout_account() { @Test void delete_payout_account() { - craftgate.settlement().deletePayoutAccount(10L); + craftgate.settlement().deletePayoutAccount(DeletePayoutAccountRequest.builder() + .id(10L) + .build()); } } diff --git a/src/test/java/io/craftgate/sample/WalletSample.java b/src/test/java/io/craftgate/sample/WalletSample.java index 35517eb3..258a6087 100644 --- a/src/test/java/io/craftgate/sample/WalletSample.java +++ b/src/test/java/io/craftgate/sample/WalletSample.java @@ -183,7 +183,9 @@ void create_withdraw() { void cancel_withdraw() { Long withdrawId = 1L; - WithdrawResponse response = craftgate.wallet().cancelWithdraw(withdrawId); + WithdrawResponse response = craftgate.wallet().cancelWithdraw(CancelWithdrawRequest.builder() + .withdrawId(withdrawId) + .build()); assertNotNull(response.getId()); assertNotNull(response.getCreatedDate()); From 216f177308d479653d317b3eadfffd208adf3af1 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Thu, 30 Jul 2026 11:33:06 +0300 Subject: [PATCH 2/6] Idempotency support --- README.md | 2 ++ .../io/craftgate/adapter/BaseAdapter.java | 12 ++----- .../io/craftgate/adapter/FraudAdapter.java | 11 ++++--- .../UpdateFraudCheckStatusRequest.java | 16 ++++++++++ .../craftgate/request/common/BaseRequest.java | 13 +++----- .../adapter/BaseRequestFoundationTest.java | 31 +++++++++++++++++++ .../java/io/craftgate/sample/FraudSample.java | 6 +++- 7 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 src/main/java/io/craftgate/request/UpdateFraudCheckStatusRequest.java diff --git a/README.md b/README.md index a8e89b9a..8914a09e 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,8 @@ craftgate.payment().expireCheckoutPayment(ExpireCheckoutPaymentRequest.builder() > Use a fresh key per distinct operation, and reuse the same key when retrying that operation. +The key is sent as a header only — it is `transient`, so it never reaches the request body, the query string, or the request signature. + ### Contributions For all contributions to this client please see the contribution guide [here](CONTRIBUTING.md). By participating in this project, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md). diff --git a/src/main/java/io/craftgate/adapter/BaseAdapter.java b/src/main/java/io/craftgate/adapter/BaseAdapter.java index 3d6777bf..89668e39 100644 --- a/src/main/java/io/craftgate/adapter/BaseAdapter.java +++ b/src/main/java/io/craftgate/adapter/BaseAdapter.java @@ -27,25 +27,17 @@ protected BaseAdapter(RequestOptions requestOptions) { this.requestOptions = requestOptions; } - /** - * Headers for a request that carries a body. The body is hashed for the signature and its - * idempotency key, when present, is sent as a header. - */ protected Map createHeaders(BaseRequest request, String path, RequestOptions requestOptions) { return createHttpHeaders(request, path, requestOptions, request.getIdempotencyKey()); } - /** - * Headers for a body-less request (e.g. GET). No body is hashed and no idempotency key is sent. - */ protected Map createHeaders(String path, RequestOptions requestOptions) { return createHttpHeaders(null, path, requestOptions, null); } /** - * Headers for a body-less mutating request (e.g. DELETE, or a POST/PUT whose parameters live in - * the path). The {@code request} wrapper is not hashed or sent as a body — only its - * idempotency key is used, so the signature stays identical to the body-less call the server expects. + * Headers for a body-less mutating request. Only the wrapper's idempotency key is used — it is + * never hashed or sent as a body, so the signature stays that of a body-less call. */ protected Map createHeaders(String path, RequestOptions requestOptions, BaseRequest request) { return createHttpHeaders(null, path, requestOptions, request.getIdempotencyKey()); diff --git a/src/main/java/io/craftgate/adapter/FraudAdapter.java b/src/main/java/io/craftgate/adapter/FraudAdapter.java index f96945c2..6acadc23 100644 --- a/src/main/java/io/craftgate/adapter/FraudAdapter.java +++ b/src/main/java/io/craftgate/adapter/FraudAdapter.java @@ -1,6 +1,5 @@ package io.craftgate.adapter; -import io.craftgate.model.FraudCheckStatus; import io.craftgate.model.FraudValueType; import io.craftgate.net.HttpClient; import io.craftgate.request.*; @@ -23,9 +22,13 @@ public FraudCheckListResponse searchFraudChecks(SearchFraudChecksRequest searchF return HttpClient.get(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions), FraudCheckListResponse.class); } - public void updateFraudCheckStatus(Long id, FraudCheckStatus fraudCheckStatus) { - String path = "/fraud/v1/fraud-checks/" + id + "/check-status"; - UpdateFraudCheckRequest updateFraudCheckRequest = UpdateFraudCheckRequest.builder().checkStatus(fraudCheckStatus).build(); + public void updateFraudCheckStatus(UpdateFraudCheckStatusRequest updateFraudCheckStatusRequest) { + String path = "/fraud/v1/fraud-checks/" + updateFraudCheckStatusRequest.getId() + "/check-status"; + // The id belongs in the path, so only the status is sent as the body. + UpdateFraudCheckRequest updateFraudCheckRequest = UpdateFraudCheckRequest.builder() + .checkStatus(updateFraudCheckStatusRequest.getCheckStatus()) + .idempotencyKey(updateFraudCheckStatusRequest.getIdempotencyKey()) + .build(); HttpClient.put(requestOptions.getBaseUrl() + path, createHeaders(updateFraudCheckRequest, path, requestOptions), updateFraudCheckRequest, Void.class); } diff --git a/src/main/java/io/craftgate/request/UpdateFraudCheckStatusRequest.java b/src/main/java/io/craftgate/request/UpdateFraudCheckStatusRequest.java new file mode 100644 index 00000000..f0b78c26 --- /dev/null +++ b/src/main/java/io/craftgate/request/UpdateFraudCheckStatusRequest.java @@ -0,0 +1,16 @@ +package io.craftgate.request; + +import io.craftgate.model.FraudCheckStatus; +import io.craftgate.request.common.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +@Data +@EqualsAndHashCode(callSuper = false) +@SuperBuilder +public class UpdateFraudCheckStatusRequest extends BaseRequest { + + private Long id; + private FraudCheckStatus checkStatus; +} diff --git a/src/main/java/io/craftgate/request/common/BaseRequest.java b/src/main/java/io/craftgate/request/common/BaseRequest.java index e6afdc45..c56ffbb5 100644 --- a/src/main/java/io/craftgate/request/common/BaseRequest.java +++ b/src/main/java/io/craftgate/request/common/BaseRequest.java @@ -6,13 +6,8 @@ import lombok.experimental.SuperBuilder; /** - * Base class for request objects sent to the Craftgate API. - * - *

Holds request-scoped options that are transmitted as headers rather than in the - * request body. Fields declared here are {@code transient} so that they are excluded from - * both the JSON body and the request signature. The class is intentionally generic so that - * other request-scoped options (e.g. a per-request language override) can be added here in - * the future and reused by any request that extends it. + * Base class for request objects sent to the Craftgate API. Fields here are {@code transient}, + * which keeps them out of the body, the signature and the query string. */ @Data @SuperBuilder @@ -21,8 +16,8 @@ public class BaseRequest { /** - * Optional idempotency key. When set on a request to a mutating endpoint (POST/PUT/DELETE), - * it is sent as the {@code x-idempotency-key} header so the operation can be safely retried. + * Optional key, sent as the {@code x-idempotency-key} header so a mutating call can be safely + * retried. */ private transient String idempotencyKey; } diff --git a/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java index 4392587d..3fc50918 100644 --- a/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java +++ b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java @@ -1,9 +1,12 @@ package io.craftgate.adapter; import com.google.gson.Gson; +import io.craftgate.model.FraudCheckStatus; import io.craftgate.request.CreatePaymentTokenRequest; import io.craftgate.request.DeleteProductRequest; import io.craftgate.request.SearchProductsRequest; +import io.craftgate.request.UpdateFraudCheckRequest; +import io.craftgate.request.UpdateFraudCheckStatusRequest; import io.craftgate.request.common.Jsons; import io.craftgate.request.common.RequestOptions; import io.craftgate.request.common.RequestQueryParamsBuilder; @@ -110,4 +113,32 @@ void bodyless_wrapper_without_key_sends_no_header() { assertFalse(headers.containsKey(IDEMPOTENCY_KEY_HEADER_NAME)); } + + @Test + void update_fraud_check_status_wrapper_carries_path_variable_and_key() { + UpdateFraudCheckStatusRequest request = UpdateFraudCheckStatusRequest.builder() + .id(2613L) + .checkStatus(FraudCheckStatus.FRAUD) + .idempotencyKey("idempotency-key-1") + .build(); + + assertEquals(2613L, request.getId()); + assertEquals(FraudCheckStatus.FRAUD, request.getCheckStatus()); + assertEquals("idempotency-key-1", request.getIdempotencyKey()); + } + + @Test + void update_fraud_check_status_body_carries_only_the_status() { + Gson gson = Jsons.getGson(); + // Mirrors what FraudAdapter#updateFraudCheckStatus builds. + UpdateFraudCheckRequest body = UpdateFraudCheckRequest.builder() + .checkStatus(FraudCheckStatus.FRAUD) + .idempotencyKey("idempotency-key-1") + .build(); + + String json = gson.toJson(body); + + assertEquals("{\"checkStatus\":\"FRAUD\"}", json); + assertEquals("idempotency-key-1", body.getIdempotencyKey()); + } } diff --git a/src/test/java/io/craftgate/sample/FraudSample.java b/src/test/java/io/craftgate/sample/FraudSample.java index e665d207..a8734823 100644 --- a/src/test/java/io/craftgate/sample/FraudSample.java +++ b/src/test/java/io/craftgate/sample/FraudSample.java @@ -11,6 +11,7 @@ import io.craftgate.request.RemoveValueFromValueListRequest; import io.craftgate.request.SearchFraudChecksRequest; import io.craftgate.request.SearchFraudRuleRequest; +import io.craftgate.request.UpdateFraudCheckStatusRequest; import io.craftgate.response.FraudAllValueListsResponse; import io.craftgate.response.FraudCheckListResponse; import io.craftgate.response.FraudRuleListResponse; @@ -54,7 +55,10 @@ void search_fraud_checks_with_payment_id() { @Test void update_fraud_check_status() { long fraudCheckId = 1L; - craftgate.fraud().updateFraudCheckStatus(fraudCheckId, FraudCheckStatus.FRAUD); + craftgate.fraud().updateFraudCheckStatus(UpdateFraudCheckStatusRequest.builder() + .id(fraudCheckId) + .checkStatus(FraudCheckStatus.FRAUD) + .build()); } @Test From 52247de5c5d319f27530385174629025d73582a0 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Thu, 30 Jul 2026 13:27:13 +0300 Subject: [PATCH 3/6] Idempotency support --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8914a09e..34d217d0 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ System.out.println(String.format("Create Payment Result: %s", response)); ``` ### Idempotency -Mutating operations (`POST`/`PUT`/`DELETE`) accept an optional idempotency key. Set it on the request object and the client sends it as the `x-idempotency-key` header, so a request can be safely retried (e.g. after a timeout) without the operation being performed twice — the server returns the result of the first request when it sees a repeated key. +Mutating operations accept an optional idempotency key. Set it on the request object and the client sends it as the `x-idempotency-key` header, so a request can be safely retried (e.g. after a timeout) without the operation being performed twice — the server returns the result of the first request when it sees a repeated key. Every request extends `BaseRequest`, so the key is available on any request via the builder: @@ -136,6 +136,8 @@ craftgate.payment().expireCheckoutPayment(ExpireCheckoutPaymentRequest.builder() > Use a fresh key per distinct operation, and reuse the same key when retrying that operation. +> The API honours the key on `POST`, `PATCH` and `DELETE` only. It is ignored on `PUT` endpoints, so retrying one of those is not de-duplicated. + The key is sent as a header only — it is `transient`, so it never reaches the request body, the query string, or the request signature. ### Contributions From 9ee19477e43c302802213c9b19c4a4f6819ee7d2 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Thu, 30 Jul 2026 14:08:03 +0300 Subject: [PATCH 4/6] Add default values to request models using @Builder.Default --- .../request/AddCardFingerprintFraudValueListRequest.java | 2 ++ .../java/io/craftgate/request/InitCheckoutPaymentRequest.java | 1 + src/main/java/io/craftgate/request/SearchProductsRequest.java | 3 +++ 3 files changed, 6 insertions(+) diff --git a/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java b/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java index 5c6cc181..653f8b37 100644 --- a/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java +++ b/src/main/java/io/craftgate/request/AddCardFingerprintFraudValueListRequest.java @@ -2,6 +2,7 @@ import io.craftgate.model.FraudOperation; +import lombok.Builder; import lombok.Data; import lombok.experimental.SuperBuilder; import lombok.EqualsAndHashCode; @@ -14,6 +15,7 @@ public class AddCardFingerprintFraudValueListRequest extends BaseRequest { String label; Integer durationInSeconds; + @Builder.Default FraudOperation operation = FraudOperation.PAYMENT; String operationId; } \ No newline at end of file diff --git a/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java b/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java index 5c9c9740..bb65d565 100644 --- a/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java +++ b/src/main/java/io/craftgate/request/InitCheckoutPaymentRequest.java @@ -53,6 +53,7 @@ public class InitCheckoutPaymentRequest extends BaseRequest { protected boolean forceAuthForNonCreditCards; protected boolean depositPayment; protected boolean guestCheckout; + @Builder.Default protected boolean allowDeleteStoredCard = true; protected boolean useTopRedirection; protected String returnBackUrl; diff --git a/src/main/java/io/craftgate/request/SearchProductsRequest.java b/src/main/java/io/craftgate/request/SearchProductsRequest.java index b9b6097f..0bc6bb53 100644 --- a/src/main/java/io/craftgate/request/SearchProductsRequest.java +++ b/src/main/java/io/craftgate/request/SearchProductsRequest.java @@ -1,6 +1,7 @@ package io.craftgate.request; import io.craftgate.model.Currency; +import lombok.Builder; import lombok.Data; import java.math.BigDecimal; @@ -26,6 +27,8 @@ public class SearchProductsRequest extends BaseRequest { private LocalDateTime minExpiresAt; private LocalDateTime maxExpiresAt; + @Builder.Default private Integer page = 0; + @Builder.Default private Integer size = 25; } \ No newline at end of file From 66869873761d5294b769ca7572ebebed1185e391 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Thu, 30 Jul 2026 14:42:03 +0300 Subject: [PATCH 5/6] refactor --- .../io/craftgate/adapter/BaseAdapter.java | 38 ++++++++++++++----- .../io/craftgate/adapter/FraudAdapter.java | 8 ++-- .../io/craftgate/adapter/MerchantAdapter.java | 4 +- .../craftgate/adapter/PayByLinkAdapter.java | 2 +- .../io/craftgate/adapter/PaymentAdapter.java | 6 +-- .../adapter/PaymentTokenAdapter.java | 2 +- .../craftgate/adapter/SettlementAdapter.java | 2 +- .../io/craftgate/adapter/WalletAdapter.java | 2 +- .../adapter/BaseRequestFoundationTest.java | 4 +- 9 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/craftgate/adapter/BaseAdapter.java b/src/main/java/io/craftgate/adapter/BaseAdapter.java index 89668e39..d66c9de1 100644 --- a/src/main/java/io/craftgate/adapter/BaseAdapter.java +++ b/src/main/java/io/craftgate/adapter/BaseAdapter.java @@ -28,7 +28,7 @@ protected BaseAdapter(RequestOptions requestOptions) { } protected Map createHeaders(BaseRequest request, String path, RequestOptions requestOptions) { - return createHttpHeaders(request, path, requestOptions, request.getIdempotencyKey()); + return createHttpHeaders(request, path, requestOptions, request); } protected Map createHeaders(String path, RequestOptions requestOptions) { @@ -36,14 +36,23 @@ protected Map createHeaders(String path, RequestOptions requestO } /** - * Headers for a body-less mutating request. Only the wrapper's idempotency key is used — it is - * never hashed or sent as a body, so the signature stays that of a body-less call. + * Headers for a mutating request that sends no body. {@code options} supplies the + * request-scoped options and is never hashed or sent, so the signature stays that of a + * body-less call. */ - protected Map createHeaders(String path, RequestOptions requestOptions, BaseRequest request) { - return createHttpHeaders(null, path, requestOptions, request.getIdempotencyKey()); + protected Map createHeadersWithoutBody(String path, RequestOptions requestOptions, BaseRequest options) { + return createHttpHeaders(null, path, requestOptions, options); } - private static Map createHttpHeaders(Object request, String path, RequestOptions options, String idempotencyKey) { + /** + * Headers for a request whose body differs from the wrapper carrying the request-scoped + * options, e.g. when a path variable lives on the wrapper but not in the body. + */ + protected Map createHeaders(BaseRequest request, String path, RequestOptions requestOptions, BaseRequest options) { + return createHttpHeaders(request, path, requestOptions, options); + } + + private static Map createHttpHeaders(Object request, String path, RequestOptions options, BaseRequest scopedOptions) { Map headers = new HashMap<>(); String randomString = UUID.randomUUID().toString(); @@ -55,12 +64,23 @@ private static Map createHttpHeaders(Object request, String path if (Objects.nonNull(options.getLanguage())) { headers.put(LANGUAGE_HEADER_NAME, options.getLanguage()); } - if (Objects.nonNull(idempotencyKey)) { - headers.put(IDEMPOTENCY_KEY_HEADER_NAME, idempotencyKey); - } + applyRequestScopedHeaders(headers, scopedOptions); return headers; } + /** + * Applies the options that travel as headers rather than in the payload. New request-scoped + * options are added here and nowhere else. + */ + private static void applyRequestScopedHeaders(Map headers, BaseRequest options) { + if (Objects.isNull(options)) { + return; + } + if (Objects.nonNull(options.getIdempotencyKey())) { + headers.put(IDEMPOTENCY_KEY_HEADER_NAME, options.getIdempotencyKey()); + } + } + private static String prepareAuthorizationString(Object request, String path, String randomString, RequestOptions options) { return HashGenerator.generateHash(options.getBaseUrl(), options.getApiKey(), options.getSecretKey(), randomString, request, path); } diff --git a/src/main/java/io/craftgate/adapter/FraudAdapter.java b/src/main/java/io/craftgate/adapter/FraudAdapter.java index 6acadc23..42484f4a 100644 --- a/src/main/java/io/craftgate/adapter/FraudAdapter.java +++ b/src/main/java/io/craftgate/adapter/FraudAdapter.java @@ -27,9 +27,9 @@ public void updateFraudCheckStatus(UpdateFraudCheckStatusRequest updateFraudChec // The id belongs in the path, so only the status is sent as the body. UpdateFraudCheckRequest updateFraudCheckRequest = UpdateFraudCheckRequest.builder() .checkStatus(updateFraudCheckStatusRequest.getCheckStatus()) - .idempotencyKey(updateFraudCheckStatusRequest.getIdempotencyKey()) .build(); - HttpClient.put(requestOptions.getBaseUrl() + path, createHeaders(updateFraudCheckRequest, path, requestOptions), + HttpClient.put(requestOptions.getBaseUrl() + path, + createHeaders(updateFraudCheckRequest, path, requestOptions, updateFraudCheckStatusRequest), updateFraudCheckRequest, Void.class); } @@ -51,7 +51,7 @@ public void createValueList(String listName, FraudValueType type) { public void deleteValueList(DeleteValueListRequest deleteValueListRequest) { String path = "/fraud/v1/value-lists/" + deleteValueListRequest.getListName(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteValueListRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, deleteValueListRequest)); } public void addValueToValueList(FraudValueListRequest fraudValueListRequest) { @@ -69,7 +69,7 @@ public void addCardFingerprint(AddCardFingerprintFraudValueListRequest request, public void removeValueFromValueList(RemoveValueFromValueListRequest removeValueFromValueListRequest) { String path = "/fraud/v1/value-lists/" + removeValueFromValueListRequest.getListName() + "/values/" + removeValueFromValueListRequest.getValueId(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, removeValueFromValueListRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, removeValueFromValueListRequest)); } public FraudRuleListResponse searchRules(SearchFraudRuleRequest searchFraudRuleRequest) { diff --git a/src/main/java/io/craftgate/adapter/MerchantAdapter.java b/src/main/java/io/craftgate/adapter/MerchantAdapter.java index 9ea45587..4760a634 100644 --- a/src/main/java/io/craftgate/adapter/MerchantAdapter.java +++ b/src/main/java/io/craftgate/adapter/MerchantAdapter.java @@ -34,7 +34,7 @@ public MerchantPosResponse updateMerchantPos(Long merchantPosId, UpdateMerchantP public void updateMerchantPosStatus(UpdateMerchantPosStatusRequest updateMerchantPosStatusRequest) { String path = "/merchant/v1/merchant-poses/" + updateMerchantPosStatusRequest.getMerchantPosId() + "/status/" + updateMerchantPosStatusRequest.getPosStatus().name(); - HttpClient.put(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, updateMerchantPosStatusRequest), Void.class); + HttpClient.put(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, updateMerchantPosStatusRequest), Void.class); } public MerchantPosListResponse searchMerchantPos(SearchMerchantPosRequest searchMerchantPosRequest) { @@ -50,7 +50,7 @@ public MerchantPosResponse retrieve(Long merchantPosId) { public void deleteMerchantPos(DeleteMerchantPosRequest deleteMerchantPosRequest) { String path = "/merchant/v1/merchant-poses/" + deleteMerchantPosRequest.getMerchantPosId(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteMerchantPosRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, deleteMerchantPosRequest)); } public MerchantPosCommissionListResponse retrieveMerchantPosCommissions(Long merchantPosId) { diff --git a/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java b/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java index 7d7abf97..f5ce5855 100644 --- a/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java +++ b/src/main/java/io/craftgate/adapter/PayByLinkAdapter.java @@ -35,7 +35,7 @@ public ProductResponse retrieveProduct(Long id) { public void deleteProduct(DeleteProductRequest deleteProductRequest) { String path = "/craftlink/v1/products/" + deleteProductRequest.getId(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deleteProductRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, deleteProductRequest)); } public ProductListResponse searchProducts(SearchProductsRequest searchProductsRequest) { diff --git a/src/main/java/io/craftgate/adapter/PaymentAdapter.java b/src/main/java/io/craftgate/adapter/PaymentAdapter.java index 6847612c..d8458e92 100644 --- a/src/main/java/io/craftgate/adapter/PaymentAdapter.java +++ b/src/main/java/io/craftgate/adapter/PaymentAdapter.java @@ -68,7 +68,7 @@ public PaymentResponse retrieveCheckoutPayment(String token) { public void expireCheckoutPayment(ExpireCheckoutPaymentRequest expireCheckoutPaymentRequest) { String path = "/payment/v1/checkout-payments/" + expireCheckoutPaymentRequest.getToken(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, expireCheckoutPaymentRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, expireCheckoutPaymentRequest)); } public DepositPaymentResponse createDepositPayment(CreateDepositPaymentRequest createDepositPaymentRequest) { @@ -257,12 +257,12 @@ public InitBnplPaymentResponse initBnplPayment(InitBnplPaymentRequest initBnplPa public PaymentResponse approveBnplPayment(ApproveBnplPaymentRequest approveBnplPaymentRequest) { String path = "/payment/v1/bnpl-payments/" + approveBnplPaymentRequest.getPaymentId() + "/approve"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, approveBnplPaymentRequest), PaymentResponse.class); + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, approveBnplPaymentRequest), PaymentResponse.class); } public BnplPaymentVerifyResponse verifyBnplPayment(VerifyBnplPaymentRequest verifyBnplPaymentRequest) { String path = "/payment/v1/bnpl-payments/" + verifyBnplPaymentRequest.getPaymentId() + "/verify"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, verifyBnplPaymentRequest), BnplPaymentVerifyResponse.class); + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, verifyBnplPaymentRequest), BnplPaymentVerifyResponse.class); } public BnplLimitInquiryResponse bnplLimitInquiryInit(BnplLimitInquiryRequest bnplLimitInquiryRequest) { diff --git a/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java b/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java index 953fe8f5..4c53f460 100644 --- a/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java +++ b/src/main/java/io/craftgate/adapter/PaymentTokenAdapter.java @@ -22,6 +22,6 @@ public PaymentTokenResponse createPaymentToken(CreatePaymentTokenRequest createP public void deletePaymentToken(DeletePaymentTokenRequest deletePaymentTokenRequest) { String path = "/payment/v1/payment-tokens/" + deletePaymentTokenRequest.getToken(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deletePaymentTokenRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, deletePaymentTokenRequest)); } } diff --git a/src/main/java/io/craftgate/adapter/SettlementAdapter.java b/src/main/java/io/craftgate/adapter/SettlementAdapter.java index dbbb9283..16699765 100644 --- a/src/main/java/io/craftgate/adapter/SettlementAdapter.java +++ b/src/main/java/io/craftgate/adapter/SettlementAdapter.java @@ -36,7 +36,7 @@ public void updatePayoutAccount(Long id, UpdatePayoutAccountRequest request) { public void deletePayoutAccount(DeletePayoutAccountRequest deletePayoutAccountRequest) { String path = "/settlement/v1/payout-accounts/" + deletePayoutAccountRequest.getId(); - HttpClient.delete(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, deletePayoutAccountRequest)); + HttpClient.delete(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, deletePayoutAccountRequest)); } public PayoutAccountListResponse searchPayoutAccount(SearchPayoutAccountRequest request) { diff --git a/src/main/java/io/craftgate/adapter/WalletAdapter.java b/src/main/java/io/craftgate/adapter/WalletAdapter.java index 327ed6a4..c1963a7f 100644 --- a/src/main/java/io/craftgate/adapter/WalletAdapter.java +++ b/src/main/java/io/craftgate/adapter/WalletAdapter.java @@ -82,7 +82,7 @@ public WithdrawResponse createWithdraw(CreateWithdrawRequest request) { public WithdrawResponse cancelWithdraw(CancelWithdrawRequest cancelWithdrawRequest) { String path = "/wallet/v1/withdraws/" + cancelWithdrawRequest.getWithdrawId() + "/cancel"; - return HttpClient.post(requestOptions.getBaseUrl() + path, createHeaders(path, requestOptions, cancelWithdrawRequest), WithdrawResponse.class); + return HttpClient.post(requestOptions.getBaseUrl() + path, createHeadersWithoutBody(path, requestOptions, cancelWithdrawRequest), WithdrawResponse.class); } public WithdrawResponse retrieveWithdraw(Long withdrawId) { diff --git a/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java index 3fc50918..cb854597 100644 --- a/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java +++ b/src/test/java/io/craftgate/adapter/BaseRequestFoundationTest.java @@ -100,7 +100,7 @@ void bodyless_wrapper_sends_idempotency_key_header() { .idempotencyKey("idempotency-key-1") .build(); - Map headers = wrapperAdapter.createHeaders("/craftlink/v1/products/42", requestOptions, request); + Map headers = wrapperAdapter.createHeadersWithoutBody("/craftlink/v1/products/42", requestOptions, request); assertEquals("idempotency-key-1", headers.get(IDEMPOTENCY_KEY_HEADER_NAME)); } @@ -109,7 +109,7 @@ void bodyless_wrapper_sends_idempotency_key_header() { void bodyless_wrapper_without_key_sends_no_header() { DeleteProductRequest request = DeleteProductRequest.builder().id(42L).build(); - Map headers = wrapperAdapter.createHeaders("/craftlink/v1/products/42", requestOptions, request); + Map headers = wrapperAdapter.createHeadersWithoutBody("/craftlink/v1/products/42", requestOptions, request); assertFalse(headers.containsKey(IDEMPOTENCY_KEY_HEADER_NAME)); } From 5bf28b50a6e3333d17cc6be35ecb7c64d5e51c66 Mon Sep 17 00:00:00 2001 From: Serhat Tunca Date: Thu, 30 Jul 2026 14:51:24 +0300 Subject: [PATCH 6/6] refactor and rename --- src/main/java/io/craftgate/adapter/BaseAdapter.java | 2 +- src/main/java/io/craftgate/adapter/FraudAdapter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/craftgate/adapter/BaseAdapter.java b/src/main/java/io/craftgate/adapter/BaseAdapter.java index d66c9de1..adeebff9 100644 --- a/src/main/java/io/craftgate/adapter/BaseAdapter.java +++ b/src/main/java/io/craftgate/adapter/BaseAdapter.java @@ -48,7 +48,7 @@ protected Map createHeadersWithoutBody(String path, RequestOptio * Headers for a request whose body differs from the wrapper carrying the request-scoped * options, e.g. when a path variable lives on the wrapper but not in the body. */ - protected Map createHeaders(BaseRequest request, String path, RequestOptions requestOptions, BaseRequest options) { + protected Map createHeadersWithOptions(BaseRequest request, String path, RequestOptions requestOptions, BaseRequest options) { return createHttpHeaders(request, path, requestOptions, options); } diff --git a/src/main/java/io/craftgate/adapter/FraudAdapter.java b/src/main/java/io/craftgate/adapter/FraudAdapter.java index 42484f4a..c2e29f60 100644 --- a/src/main/java/io/craftgate/adapter/FraudAdapter.java +++ b/src/main/java/io/craftgate/adapter/FraudAdapter.java @@ -29,7 +29,7 @@ public void updateFraudCheckStatus(UpdateFraudCheckStatusRequest updateFraudChec .checkStatus(updateFraudCheckStatusRequest.getCheckStatus()) .build(); HttpClient.put(requestOptions.getBaseUrl() + path, - createHeaders(updateFraudCheckRequest, path, requestOptions, updateFraudCheckStatusRequest), + createHeadersWithOptions(updateFraudCheckRequest, path, requestOptions, updateFraudCheckStatusRequest), updateFraudCheckRequest, Void.class); }