diff --git a/.gitignore b/.gitignore index 453a1383..a8a68238 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ lib/* */target/ /target/ /.metadata/ +.metals/* \ No newline at end of file diff --git a/README.md b/README.md index 6d5eaeab..bc794856 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Riskified JAVA SDK ================= -version: 6.0.1 +version: 6.1.0 ------------------ See http://apiref.riskified.com for full API documentation @@ -104,7 +104,7 @@ curl -H "Content-Type: application/json" -H "X-RISKIFIED-HMAC-SHA256: 071ef80d5 com.riskified riskified-sdk - 6.0.1 + 6.1.0 ``` diff --git a/riskified-sample/pom.xml b/riskified-sample/pom.xml index 0d2f8790..e7fddf46 100644 --- a/riskified-sample/pom.xml +++ b/riskified-sample/pom.xml @@ -13,7 +13,7 @@ com.riskified riskified-sdk - 6.0.1 + 6.1.0 diff --git a/riskified-sdk/pom.xml b/riskified-sdk/pom.xml index dd2966d5..cba50966 100644 --- a/riskified-sdk/pom.xml +++ b/riskified-sdk/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.riskified riskified-sdk - 6.0.1 + 6.1.0 Riskified SDK Riskified rest api SDK for java https://www.riskified.com diff --git a/riskified-sdk/src/main/java/com/riskified/RiskifiedClient.java b/riskified-sdk/src/main/java/com/riskified/RiskifiedClient.java index b96ea49f..809e826b 100644 --- a/riskified-sdk/src/main/java/com/riskified/RiskifiedClient.java +++ b/riskified-sdk/src/main/java/com/riskified/RiskifiedClient.java @@ -1075,7 +1075,7 @@ private HttpPost createPostRequest(String url) { postRequest.setHeader(HttpHeaders.ACCEPT, "application/vnd.riskified.com; version=2"); postRequest.setHeader(HttpHeaders.ACCEPT, "application/json"); postRequest.setHeader("X-RISKIFIED-SHOP-DOMAIN", shopUrl); - postRequest.setHeader("User-Agent","riskified_java_sdk/6.0.1"); // TODO: take the version automatically + postRequest.setHeader("User-Agent","riskified_java_sdk/6.1.0"); // TODO: take the version automatically postRequest.setHeader("Version",versionHeaderValue); return postRequest; } diff --git a/riskified-sdk/src/main/java/com/riskified/models/BankWirePaymentDetails.java b/riskified-sdk/src/main/java/com/riskified/models/BankWirePaymentDetails.java index 69652cbb..23e90baa 100644 --- a/riskified-sdk/src/main/java/com/riskified/models/BankWirePaymentDetails.java +++ b/riskified-sdk/src/main/java/com/riskified/models/BankWirePaymentDetails.java @@ -11,6 +11,12 @@ public class BankWirePaymentDetails implements IPaymentDetails { private Date storedPaymentCreatedAt; private Date storedPaymentUpdatedAt; private PaymentType paymentType = PaymentType.BANK_TRANSFER; + private int daysSinceAccountOpening; + private int daysWithNegativeBalanceCount; + private boolean isSavingsOrMoneyMarketAccount; + private int nsfOverdraftTransactionsCount; + private int unauthorizedTransactionsCount; + private PlaidScores plaidScores; public BankWirePaymentDetails(String accountNumber, String routingNumber) { this.accountNumber = accountNumber; @@ -59,10 +65,59 @@ public void setStoredPaymentUpdatedAt(Date storedPaymentUpdatedAt){ public PaymentType getPaymentType() { return paymentType; } + public int getDaysSinceAccountOpening() { + return daysSinceAccountOpening; + } + + public void setDaysSinceAccountOpening(int daysSinceAccountOpening) { + this.daysSinceAccountOpening = daysSinceAccountOpening; + } + + public int getDaysWithNegativeBalanceCount() { + return daysWithNegativeBalanceCount; + } + + public void setDaysWithNegativeBalanceCount(int daysWithNegativeBalanceCount) { + this.daysWithNegativeBalanceCount = daysWithNegativeBalanceCount; + } + + public boolean getIsSavingsOrMoneyMarketAccount() { + return isSavingsOrMoneyMarketAccount; + } + + public void setIsSavingsOrMoneyMarketAccount(boolean isSavingsOrMoneyMarketAccount) { + this.isSavingsOrMoneyMarketAccount = isSavingsOrMoneyMarketAccount; + } + + public int getNsfOverdraftTransactionsCount() { + return nsfOverdraftTransactionsCount; + } + + public void setNsfOverdraftTransactionsCount(int nsfOverdraftTransactionsCount) { + this.nsfOverdraftTransactionsCount = nsfOverdraftTransactionsCount; + } + + public int getUnauthorizedTransactionsCount() { + return unauthorizedTransactionsCount; + } + + public void setUnauthorizedTransactionsCount(int unauthorizedTransactionsCount) { + this.unauthorizedTransactionsCount = unauthorizedTransactionsCount; + } + + public PlaidScores getPlaidScores() { + return plaidScores; + } + + public void setPlaidScores(PlaidScores plaidScores) { + this.plaidScores = plaidScores; + } + public void validate(Validation validationType) throws FieldBadFormatException { if (validationType == Validation.ALL) { Validate.notNullOrEmpty(this, this.accountNumber, "Bank Account Number"); Validate.notNullOrEmpty(this, this.routingNumber, "Bank Routing Number"); } } -} + +} \ No newline at end of file diff --git a/riskified-sdk/src/main/java/com/riskified/models/InitiatedReturnRisk.java b/riskified-sdk/src/main/java/com/riskified/models/InitiatedReturnRisk.java new file mode 100644 index 00000000..95f179be --- /dev/null +++ b/riskified-sdk/src/main/java/com/riskified/models/InitiatedReturnRisk.java @@ -0,0 +1,20 @@ +package com.riskified.models; + +public class InitiatedReturnRisk { + private int score; + private int riskTier; + + public int getScore() { + return score; + } + public void setScore(int score) { + this.score = score; + } + public int getRiskTier() { + return riskTier; + } + + public void setRiskTier(int riskTier) { + this.riskTier = riskTier; + } +} \ No newline at end of file diff --git a/riskified-sdk/src/main/java/com/riskified/models/PlaidScores.java b/riskified-sdk/src/main/java/com/riskified/models/PlaidScores.java new file mode 100644 index 00000000..0ce0d8ba --- /dev/null +++ b/riskified-sdk/src/main/java/com/riskified/models/PlaidScores.java @@ -0,0 +1,22 @@ +package com.riskified.models; + +public class PlaidScores { + private InitiatedReturnRisk customerInitiatedReturnRisk; + private InitiatedReturnRisk bankInitiatedReturnRisk; + + public InitiatedReturnRisk getCustomerInitiatedReturnRisk() { + return customerInitiatedReturnRisk; + } + + public void setCustomerInitiatedReturnRisk(InitiatedReturnRisk customerInitiatedReturnRisk) { + this.customerInitiatedReturnRisk = customerInitiatedReturnRisk; + } + + public InitiatedReturnRisk getBankInitiatedReturnRisk() { + return bankInitiatedReturnRisk; + } + + public void setBankInitiatedReturnRisk(InitiatedReturnRisk bankInitiatedReturnRisk) { + this.bankInitiatedReturnRisk = bankInitiatedReturnRisk; + } +} \ No newline at end of file diff --git a/riskified-sdk/src/test/java/com/riskified/models/PaymentDetailsTest.java b/riskified-sdk/src/test/java/com/riskified/models/PaymentDetailsTest.java index 6b9250d6..c5b4504c 100644 --- a/riskified-sdk/src/test/java/com/riskified/models/PaymentDetailsTest.java +++ b/riskified-sdk/src/test/java/com/riskified/models/PaymentDetailsTest.java @@ -57,4 +57,81 @@ public void testBankWirePaymentTypeSerializesToBankTransfer() { String json = gson.toJson(bankWire); assertTrue(json.contains("\"payment_type\":\"bank_transfer\"")); } + + @Test + public void testBankWirePlaidScalarFieldsSerializeWithCorrectKeys() { + BankWirePaymentDetails bankWire = new BankWirePaymentDetails("123456789", "021000021"); + bankWire.setDaysSinceAccountOpening(90); + bankWire.setDaysWithNegativeBalanceCount(4); + bankWire.setIsSavingsOrMoneyMarketAccount(true); + bankWire.setNsfOverdraftTransactionsCount(31); + bankWire.setUnauthorizedTransactionsCount(2); + + String json = gson.toJson(bankWire); + + assertTrue(json.contains("\"days_since_account_opening\":90")); + assertTrue(json.contains("\"days_with_negative_balance_count\":4")); + assertTrue(json.contains("\"is_savings_or_money_market_account\":true")); + assertTrue(json.contains("\"nsf_overdraft_transactions_count\":31")); + assertTrue(json.contains("\"unauthorized_transactions_count\":2")); + } + + @Test + public void testBankWirePlaidScoresGetterAndSetter() { + BankWirePaymentDetails bankWire = new BankWirePaymentDetails("123456789", "021000021"); + + InitiatedReturnRisk customerRisk = new InitiatedReturnRisk(); + customerRisk.setScore(9); + customerRisk.setRiskTier(1); + + InitiatedReturnRisk bankRisk = new InitiatedReturnRisk(); + bankRisk.setScore(82); + bankRisk.setRiskTier(7); + + PlaidScores plaidScores = new PlaidScores(); + plaidScores.setCustomerInitiatedReturnRisk(customerRisk); + plaidScores.setBankInitiatedReturnRisk(bankRisk); + + bankWire.setPlaidScores(plaidScores); + + assertEquals(9, bankWire.getPlaidScores().getCustomerInitiatedReturnRisk().getScore()); + assertEquals(1, bankWire.getPlaidScores().getCustomerInitiatedReturnRisk().getRiskTier()); + assertEquals(82, bankWire.getPlaidScores().getBankInitiatedReturnRisk().getScore()); + assertEquals(7, bankWire.getPlaidScores().getBankInitiatedReturnRisk().getRiskTier()); + } + + @Test + public void testBankWirePlaidScoresSerializeWithCorrectStructure() { + BankWirePaymentDetails bankWire = new BankWirePaymentDetails("123456789", "021000021"); + + InitiatedReturnRisk customerRisk = new InitiatedReturnRisk(); + customerRisk.setScore(9); + customerRisk.setRiskTier(1); + + InitiatedReturnRisk bankRisk = new InitiatedReturnRisk(); + bankRisk.setScore(82); + bankRisk.setRiskTier(7); + + PlaidScores plaidScores = new PlaidScores(); + plaidScores.setCustomerInitiatedReturnRisk(customerRisk); + plaidScores.setBankInitiatedReturnRisk(bankRisk); + + bankWire.setPlaidScores(plaidScores); + + String json = gson.toJson(bankWire); + + assertTrue(json.contains("\"plaid_scores\"")); + assertTrue(json.contains("\"customer_initiated_return_risk\"")); + assertTrue(json.contains("\"bank_initiated_return_risk\"")); + assertTrue(json.contains("\"score\":9")); + assertTrue(json.contains("\"risk_tier\":1")); + assertTrue(json.contains("\"score\":82")); + assertTrue(json.contains("\"risk_tier\":7")); + } + + @Test + public void testBankWirePlaidScoresNullByDefault() { + BankWirePaymentDetails bankWire = new BankWirePaymentDetails("123456789", "021000021"); + assertNull(bankWire.getPlaidScores()); + } }