diff --git a/api/build.gradle b/api/build.gradle index 4912bfbb..284b8025 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -3,12 +3,13 @@ test { } dependencies { - compile project(':model') - compile project(':security') + implementation project(':model') + implementation project(':security') implementation 'com.fasterxml.jackson.core:jackson-core' implementation 'com.fasterxml.jackson.core:jackson-databind' implementation 'com.fasterxml.jackson.core:jackson-annotations' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8' + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework:spring-context' implementation 'org.slf4j:slf4j-api' @@ -22,4 +23,4 @@ dependencies { testImplementation 'org.junit.platform:junit-platform-suite-api' testImplementation 'org.springframework.boot:spring-boot-test' testImplementation 'org.springframework.boot:spring-boot-starter-test' -} \ No newline at end of file +} diff --git a/api/src/main/java/com/coinbase/exchange/api/accounts/Account.java b/api/src/main/java/com/coinbase/exchange/api/accounts/Account.java index 5ec5d310..a994b9f7 100644 --- a/api/src/main/java/com/coinbase/exchange/api/accounts/Account.java +++ b/api/src/main/java/com/coinbase/exchange/api/accounts/Account.java @@ -80,4 +80,16 @@ public String getProfile_id() { public void setProfile_id(String profile_id) { this.profile_id = profile_id; } + + @Override + public String toString() { + return "Account{" + + "id='" + id + '\'' + + ", currency='" + currency + '\'' + + ", balance=" + balance + + ", available=" + available + + ", hold=" + hold + + ", profile_id='" + profile_id + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/accounts/AccountHistory.java b/api/src/main/java/com/coinbase/exchange/api/accounts/AccountHistory.java index 186ce6bc..dc8efbe1 100644 --- a/api/src/main/java/com/coinbase/exchange/api/accounts/AccountHistory.java +++ b/api/src/main/java/com/coinbase/exchange/api/accounts/AccountHistory.java @@ -64,4 +64,16 @@ public Detail getDetail() { public void setDetail(Detail detail) { this.detail = detail; } + + @Override + public String toString() { + return "AccountHistory{" + + "id=" + id + + ", created_at='" + created_at + '\'' + + ", amount=" + amount + + ", balance=" + balance + + ", type='" + type + '\'' + + ", detail=" + detail + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/accounts/AccountService.java b/api/src/main/java/com/coinbase/exchange/api/accounts/AccountService.java index 534407f9..962c5d55 100644 --- a/api/src/main/java/com/coinbase/exchange/api/accounts/AccountService.java +++ b/api/src/main/java/com/coinbase/exchange/api/accounts/AccountService.java @@ -1,5 +1,6 @@ package com.coinbase.exchange.api.accounts; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.Hold; import com.coinbase.exchange.api.exchange.CoinbaseExchange; import org.springframework.core.ParameterizedTypeReference; @@ -19,15 +20,15 @@ public AccountService(final CoinbaseExchange exchange) { public static final String ACCOUNTS_ENDPOINT = "/accounts"; - public List getAccounts(){ + public List getAccounts() throws CoinbaseExchangeException { return exchange.getAsList(ACCOUNTS_ENDPOINT, new ParameterizedTypeReference(){}); } - public Account getAccount(String id) { + public Account getAccount(String id) throws CoinbaseExchangeException { return exchange.get(ACCOUNTS_ENDPOINT + "/" + id, new ParameterizedTypeReference() {}); } - public List getAccountHistory(String accountId) { + public List getAccountHistory(String accountId) throws CoinbaseExchangeException { String accountHistoryEndpoint = ACCOUNTS_ENDPOINT + "/" + accountId + "/ledger"; return exchange.getAsList(accountHistoryEndpoint, new ParameterizedTypeReference(){}); } @@ -35,7 +36,7 @@ public List getAccountHistory(String accountId) { public List getPagedAccountHistory(String accountId, String beforeOrAfter, Integer pageNumber, - Integer limit) { + Integer limit) throws CoinbaseExchangeException { String accountHistoryEndpoint = ACCOUNTS_ENDPOINT + "/" + accountId + "/ledger"; return exchange.pagedGetAsList(accountHistoryEndpoint, @@ -45,7 +46,7 @@ public List getPagedAccountHistory(String accountId, limit); } - public List getHolds(String accountId) { + public List getHolds(String accountId) throws CoinbaseExchangeException { String holdsEndpoint = ACCOUNTS_ENDPOINT + "/" + accountId + "/holds"; return exchange.getAsList(holdsEndpoint, new ParameterizedTypeReference(){}); } @@ -53,7 +54,7 @@ public List getHolds(String accountId) { public List getPagedHolds(String accountId, String beforeOrAfter, Integer pageNumber, - Integer limit) { + Integer limit) throws CoinbaseExchangeException { String holdsEndpoint = ACCOUNTS_ENDPOINT + "/" + accountId + "/holds"; return exchange.pagedGetAsList(holdsEndpoint, new ParameterizedTypeReference(){}, diff --git a/api/src/main/java/com/coinbase/exchange/api/deposits/DepositService.java b/api/src/main/java/com/coinbase/exchange/api/deposits/DepositService.java index bf87ba2d..7f142160 100644 --- a/api/src/main/java/com/coinbase/exchange/api/deposits/DepositService.java +++ b/api/src/main/java/com/coinbase/exchange/api/deposits/DepositService.java @@ -1,5 +1,6 @@ package com.coinbase.exchange.api.deposits; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.CoinbasePaymentRequest; import com.coinbase.exchange.model.PaymentResponse; import com.coinbase.exchange.api.exchange.CoinbaseExchange; @@ -28,7 +29,8 @@ public DepositService(final CoinbaseExchange exchange) { * @param paymentMethodId * @return PaymentResponse */ - public PaymentResponse depositViaPaymentMethod(BigDecimal amount, String currency, final String paymentMethodId) { + public PaymentResponse depositViaPaymentMethod(BigDecimal amount, String currency, final String paymentMethodId) + throws CoinbaseExchangeException { CoinbasePaymentRequest coinbasePaymentRequest = new CoinbasePaymentRequest(amount, currency, paymentMethodId); return exchange.post(DEPOSIT_ENDPOINT + PAYMENTS, new ParameterizedTypeReference(){}, @@ -41,7 +43,8 @@ public PaymentResponse depositViaPaymentMethod(BigDecimal amount, String currenc * @param coinbaseAccountId * @return PaymentResponse */ - public PaymentResponse depositViaCoinbase(BigDecimal amount, String currency, String coinbaseAccountId) { + public PaymentResponse depositViaCoinbase(BigDecimal amount, String currency, String coinbaseAccountId) + throws CoinbaseExchangeException { CoinbasePaymentRequest coinbasePaymentRequest = new CoinbasePaymentRequest(amount, currency, coinbaseAccountId); return exchange.post(DEPOSIT_ENDPOINT + COINBASE_PAYMENT, new ParameterizedTypeReference(){}, diff --git a/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchange.java b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchange.java index 892f3397..e42b7e78 100644 --- a/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchange.java +++ b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchange.java @@ -8,11 +8,24 @@ public interface CoinbaseExchange { String getBaseUrl(); + HttpEntity securityHeaders(String endpoint, String method, String body); - T get(String endpoint, ParameterizedTypeReference type); - T pagedGet(String endpoint, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, Integer limit); - List getAsList(String endpoint, ParameterizedTypeReference type); - List pagedGetAsList(String endpoint, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, Integer limit); - T post(String endpoint, ParameterizedTypeReference type, R jsonObject); - T delete(String endpoint, ParameterizedTypeReference type); + + T get(String endpoint, ParameterizedTypeReference type) throws CoinbaseExchangeException; + + T pagedGet( + String endpoint, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, + Integer limit + ) throws CoinbaseExchangeException; + + List getAsList(String endpoint, ParameterizedTypeReference type) throws CoinbaseExchangeException; + + List pagedGetAsList( + String endpoint, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, + Integer limit + ) throws CoinbaseExchangeException; + + T post(String endpoint, ParameterizedTypeReference type, R jsonObject) throws CoinbaseExchangeException; + + T delete(String endpoint, ParameterizedTypeReference type) throws CoinbaseExchangeException; } diff --git a/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeException.java b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeException.java new file mode 100644 index 00000000..e84808f6 --- /dev/null +++ b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeException.java @@ -0,0 +1,31 @@ +package com.coinbase.exchange.api.exchange; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.web.client.HttpClientErrorException; + +public class CoinbaseExchangeException extends Exception { + public CoinbaseExchangeException(final String message, final Throwable cause) { + super(message, cause); + } + + static CoinbaseExchangeException create(final HttpClientErrorException cause, final ObjectMapper objectMapper) { + String message = null; + try { + final Error error = objectMapper.readValue(cause.getResponseBodyAsString(), Error.class); + message = error.getMessage(); + } catch (JsonProcessingException e) { + // ignore + } + + return new CoinbaseExchangeException(message, cause); + } + + private static class Error { + private String message; + + public String getMessage() { + return message; + } + } +} diff --git a/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeImpl.java b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeImpl.java index c798eee9..3d145299 100644 --- a/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeImpl.java +++ b/api/src/main/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeImpl.java @@ -48,7 +48,7 @@ public CoinbaseExchangeImpl(final String publicKey, } @Override - public T get(String resourcePath, ParameterizedTypeReference responseType) { + public T get(String resourcePath, ParameterizedTypeReference responseType) throws CoinbaseExchangeException { try { ResponseEntity responseEntity = restTemplate.exchange(getBaseUrl() + resourcePath, HttpMethod.GET, @@ -59,12 +59,13 @@ public T get(String resourcePath, ParameterizedTypeReference responseType return responseEntity.getBody(); } catch (HttpClientErrorException ex) { log.error("GET request Failed for '" + resourcePath + "': " + ex.getResponseBodyAsString()); + throw CoinbaseExchangeException.create(ex, objectMapper); } - return null; } @Override - public List getAsList(String resourcePath, ParameterizedTypeReference responseType) { + public List getAsList(String resourcePath, ParameterizedTypeReference responseType) + throws CoinbaseExchangeException { T[] result = get(resourcePath, responseType); return result == null ? emptyList() : Arrays.asList(result); @@ -75,7 +76,7 @@ public T pagedGet(String resourcePath, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, - Integer limit) { + Integer limit) throws CoinbaseExchangeException { resourcePath += "?" + beforeOrAfter + "=" + pageNumber + "&limit=" + limit; return get(resourcePath, responseType); } @@ -85,13 +86,14 @@ public List pagedGetAsList(String resourcePath, ParameterizedTypeReference responseType, String beforeOrAfter, Integer pageNumber, - Integer limit) { + Integer limit) throws CoinbaseExchangeException { T[] result = pagedGet(resourcePath, responseType, beforeOrAfter, pageNumber, limit ); return result == null ? emptyList() : Arrays.asList(result); } @Override - public T delete(String resourcePath, ParameterizedTypeReference responseType) { + public T delete(String resourcePath, ParameterizedTypeReference responseType) + throws CoinbaseExchangeException { try { ResponseEntity response = restTemplate.exchange(getBaseUrl() + resourcePath, HttpMethod.DELETE, @@ -100,12 +102,13 @@ public T delete(String resourcePath, ParameterizedTypeReference responseT return response.getBody(); } catch (HttpClientErrorException ex) { log.error("DELETE request Failed for '" + resourcePath + "': " + ex.getResponseBodyAsString()); + throw CoinbaseExchangeException.create(ex, objectMapper); } - return null; } @Override - public T post(String resourcePath, ParameterizedTypeReference responseType, R jsonObj) { + public T post(String resourcePath, ParameterizedTypeReference responseType, R jsonObj) + throws CoinbaseExchangeException { String jsonBody = toJson(jsonObj); try { @@ -116,8 +119,8 @@ public T post(String resourcePath, ParameterizedTypeReference respons return response.getBody(); } catch (HttpClientErrorException ex) { log.error("POST request Failed for '" + resourcePath + "': " + ex.getResponseBodyAsString()); + throw CoinbaseExchangeException.create(ex, objectMapper); } - return null; } @Override diff --git a/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketData.java b/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketData.java index ad2f319e..db7eb1b7 100644 --- a/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketData.java +++ b/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketData.java @@ -42,4 +42,13 @@ public List getAsks() { public void setAsks(List asks) { this.asks = asks; } + + @Override + public String toString() { + return "MarketData{" + + "sequence=" + sequence + + ", bids=" + bids + + ", asks=" + asks + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketDataService.java b/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketDataService.java index 7e85ae92..91266103 100644 --- a/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketDataService.java +++ b/api/src/main/java/com/coinbase/exchange/api/marketdata/MarketDataService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.marketdata; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.springframework.core.ParameterizedTypeReference; import java.util.List; @@ -18,14 +19,14 @@ public MarketDataService(final CoinbaseExchange exchange) { public static final String PRODUCT_ENDPOINT = "/products"; - public MarketData getMarketDataOrderBook(String productId, int level) { + public MarketData getMarketDataOrderBook(String productId, int level) throws CoinbaseExchangeException { String marketDataEndpoint = PRODUCT_ENDPOINT + "/" + productId + "/book"; if(level != 1) marketDataEndpoint += "?level=" + level; return exchange.get(marketDataEndpoint, new ParameterizedTypeReference(){}); } - public List getTrades(String productId) { + public List getTrades(String productId) throws CoinbaseExchangeException { String tradesEndpoint = PRODUCT_ENDPOINT + "/" + productId + "/trades"; return exchange.getAsList(tradesEndpoint, new ParameterizedTypeReference(){}); } diff --git a/api/src/main/java/com/coinbase/exchange/api/marketdata/Message.java b/api/src/main/java/com/coinbase/exchange/api/marketdata/Message.java index 87b17af4..61e28595 100644 --- a/api/src/main/java/com/coinbase/exchange/api/marketdata/Message.java +++ b/api/src/main/java/com/coinbase/exchange/api/marketdata/Message.java @@ -106,4 +106,20 @@ public void setTime(String time) { this.time = time; } + @Override + public String toString() { + return "Message{" + + "type='" + type + '\'' + + ", sequence=" + sequence + + ", order_id='" + order_id + '\'' + + ", size=" + size + + ", price=" + price + + ", side='" + side + '\'' + + ", remaining_size=" + remaining_size + + ", reason='" + reason + '\'' + + ", maker_order_id='" + maker_order_id + '\'' + + ", taker_order_id='" + taker_order_id + '\'' + + ", time='" + time + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/orders/Order.java b/api/src/main/java/com/coinbase/exchange/api/orders/Order.java index f1dfb1b7..bf111dde 100644 --- a/api/src/main/java/com/coinbase/exchange/api/orders/Order.java +++ b/api/src/main/java/com/coinbase/exchange/api/orders/Order.java @@ -176,12 +176,24 @@ public void setSettled(Boolean settled) { this.settled = settled; } + @Override public String toString() { - String orderString = getSide(); - orderString += ": " + getProduct_id(); - orderString += ": " + getPrice(); - orderString += ": " + getSize(); - return orderString; + return "Order{" + + "id='" + id + '\'' + + ", size='" + size + '\'' + + ", price='" + price + '\'' + + ", product_id='" + product_id + '\'' + + ", side='" + side + '\'' + + ", stp='" + stp + '\'' + + ", type='" + type + '\'' + + ", time_in_force='" + time_in_force + '\'' + + ", post_only='" + post_only + '\'' + + ", created_at='" + created_at + '\'' + + ", fill_fees='" + fill_fees + '\'' + + ", filled_size='" + filled_size + '\'' + + ", executed_value='" + executed_value + '\'' + + ", status='" + status + '\'' + + ", settled=" + settled + + '}'; } - } diff --git a/api/src/main/java/com/coinbase/exchange/api/orders/OrderService.java b/api/src/main/java/com/coinbase/exchange/api/orders/OrderService.java index c75e94f4..c553bd16 100644 --- a/api/src/main/java/com/coinbase/exchange/api/orders/OrderService.java +++ b/api/src/main/java/com/coinbase/exchange/api/orders/OrderService.java @@ -1,5 +1,6 @@ package com.coinbase.exchange.api.orders; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.Fill; import com.coinbase.exchange.model.Hold; import com.coinbase.exchange.model.NewOrderSingle; @@ -22,40 +23,40 @@ public OrderService(final CoinbaseExchange exchange) { this.exchange = exchange; } - public List getHolds(String accountId) { + public List getHolds(String accountId) throws CoinbaseExchangeException { return exchange.getAsList(ORDERS_ENDPOINT + "/" + accountId + "/holds", new ParameterizedTypeReference(){}); } - public List getOpenOrders(String accountId) { + public List getOpenOrders(String accountId) throws CoinbaseExchangeException { return exchange.getAsList(ORDERS_ENDPOINT + "/" + accountId + "/orders", new ParameterizedTypeReference(){}); } - public Order getOrder(String orderId) { + public Order getOrder(String orderId) throws CoinbaseExchangeException { return exchange.get(ORDERS_ENDPOINT + "/" + orderId,new ParameterizedTypeReference(){}); } - public Order createOrder(NewOrderSingle order) { + public Order createOrder(NewOrderSingle order) throws CoinbaseExchangeException { return exchange.post(ORDERS_ENDPOINT, new ParameterizedTypeReference(){}, order); } - public String cancelOrder(String orderId) { + public String cancelOrder(String orderId) throws CoinbaseExchangeException { String deleteEndpoint = ORDERS_ENDPOINT + "/" + orderId; return exchange.delete(deleteEndpoint, new ParameterizedTypeReference(){}); } - public List getOpenOrders() { + public List getOpenOrders() throws CoinbaseExchangeException { return exchange.getAsList(ORDERS_ENDPOINT, new ParameterizedTypeReference(){}); } - public List cancelAllOpenOrders() { + public List cancelAllOpenOrders() throws CoinbaseExchangeException { return Arrays.asList(exchange.delete(ORDERS_ENDPOINT, new ParameterizedTypeReference(){})); } - public List getFillsByProductId(String product_id, int resultLimit) { + public List getFillsByProductId(String product_id, int resultLimit) throws CoinbaseExchangeException { return exchange.getAsList(FILLS_ENDPOINT + "?product_id=" + product_id + "&limit=" + resultLimit, new ParameterizedTypeReference(){}); } - - public List getFillByOrderId(String order_id, int resultLimit) { + + public List getFillByOrderId(String order_id, int resultLimit) throws CoinbaseExchangeException { return exchange.getAsList(FILLS_ENDPOINT + "?order_id=" + order_id + "&limit=" + resultLimit, new ParameterizedTypeReference(){}); } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/AccountLimit.java b/api/src/main/java/com/coinbase/exchange/api/payments/AccountLimit.java index 0d10e414..81d891e8 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/AccountLimit.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/AccountLimit.java @@ -40,4 +40,13 @@ public Amount getRemaining() { public void setRemaining(Amount remaining) { this.remaining = remaining; } + + @Override + public String toString() { + return "AccountLimit{" + + "period_in_days=" + period_in_days + + ", total=" + total + + ", remaining=" + remaining + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/Amount.java b/api/src/main/java/com/coinbase/exchange/api/payments/Amount.java index 36fe6117..a447fcfd 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/Amount.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/Amount.java @@ -32,4 +32,12 @@ public String getCurrency() { public void setCurrency(String currency) { this.currency = currency; } + + @Override + public String toString() { + return "Amount{" + + "amount=" + amount + + ", currency='" + currency + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/BankCountry.java b/api/src/main/java/com/coinbase/exchange/api/payments/BankCountry.java index 19a3bb42..c29237b8 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/BankCountry.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/BankCountry.java @@ -30,4 +30,12 @@ public String getName() { public void setName(String name) { this.name = name; } + + @Override + public String toString() { + return "BankCountry{" + + "code='" + code + '\'' + + ", name='" + name + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/CoinbaseAccount.java b/api/src/main/java/com/coinbase/exchange/api/payments/CoinbaseAccount.java index 216b43d9..14f92309 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/CoinbaseAccount.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/CoinbaseAccount.java @@ -110,4 +110,19 @@ public SepaDepositInformation getSepa_deposit_information() { public void setSepa_deposit_information(SepaDepositInformation sepa_deposit_information) { this.sepa_deposit_information = sepa_deposit_information; } + + @Override + public String toString() { + return "CoinbaseAccount{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", balance=" + balance + + ", currency='" + currency + '\'' + + ", type='" + type + '\'' + + ", primary=" + primary + + ", active=" + active + + ", wire_deposit_information=" + wire_deposit_information + + ", sepa_deposit_information=" + sepa_deposit_information + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/DepositInformation.java b/api/src/main/java/com/coinbase/exchange/api/payments/DepositInformation.java index 13ea5a7b..1a523045 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/DepositInformation.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/DepositInformation.java @@ -97,4 +97,18 @@ public String getReference() { public void setReference(String reference) { this.reference = reference; } + + @Override + public String toString() { + return "DepositInformation{" + + "account_number='" + account_number + '\'' + + ", routing_number='" + routing_number + '\'' + + ", bank_name='" + bank_name + '\'' + + ", bank_address='" + bank_address + '\'' + + ", bank_country=" + bank_country + + ", account_name='" + account_name + '\'' + + ", account_address='" + account_address + '\'' + + ", reference='" + reference + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/Limit.java b/api/src/main/java/com/coinbase/exchange/api/payments/Limit.java index 625ad7fd..6194ad59 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/Limit.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/Limit.java @@ -1,5 +1,7 @@ package com.coinbase.exchange.api.payments; +import java.util.Arrays; + /** * Created by robevansuk on 16/02/2017. */ @@ -50,4 +52,14 @@ public AccountLimit[] getDeposit() { public void setDeposit(AccountLimit[] deposit) { this.deposit = deposit; } + + @Override + public String toString() { + return "Limit{" + + "buy=" + Arrays.toString(buy) + + ", instant_buy=" + Arrays.toString(instant_buy) + + ", sell=" + Arrays.toString(sell) + + ", deposit=" + Arrays.toString(deposit) + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/PaymentService.java b/api/src/main/java/com/coinbase/exchange/api/payments/PaymentService.java index 655f80c5..11afb064 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/PaymentService.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/PaymentService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.payments; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.springframework.core.ParameterizedTypeReference; import java.util.List; @@ -19,11 +20,11 @@ public PaymentService(final CoinbaseExchange coinbaseExchange) { this.coinbaseExchange = coinbaseExchange; } - public List getPaymentTypes() { + public List getPaymentTypes() throws CoinbaseExchangeException { return coinbaseExchange.getAsList(PAYMENT_METHODS_ENDPOINT, new ParameterizedTypeReference(){}); } - public List getCoinbaseAccounts() { + public List getCoinbaseAccounts() throws CoinbaseExchangeException { return coinbaseExchange.getAsList(COINBASE_ACCOUNTS_ENDPOINT, new ParameterizedTypeReference() {}); } -} \ No newline at end of file +} diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/PaymentType.java b/api/src/main/java/com/coinbase/exchange/api/payments/PaymentType.java index d0cbd52e..f490e95a 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/PaymentType.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/PaymentType.java @@ -129,4 +129,21 @@ public Limit getLimits() { public void setLimits(Limit limits) { this.limits = limits; } + + @Override + public String toString() { + return "PaymentType{" + + "id='" + id + '\'' + + ", type='" + type + '\'' + + ", name='" + name + '\'' + + ", currency='" + currency + '\'' + + ", primary_buy=" + primary_buy + + ", primary_sell=" + primary_sell + + ", allow_buy=" + allow_buy + + ", allow_sell=" + allow_sell + + ", allow_deposit=" + allow_deposit + + ", allow_withdraw=" + allow_withdraw + + ", limits=" + limits + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/payments/SepaDepositInformation.java b/api/src/main/java/com/coinbase/exchange/api/payments/SepaDepositInformation.java index a407d98d..6302335d 100644 --- a/api/src/main/java/com/coinbase/exchange/api/payments/SepaDepositInformation.java +++ b/api/src/main/java/com/coinbase/exchange/api/payments/SepaDepositInformation.java @@ -97,4 +97,18 @@ public String getReference() { public void setReference(String reference) { this.reference = reference; } + + @Override + public String toString() { + return "SepaDepositInformation{" + + "iban='" + iban + '\'' + + ", swift='" + swift + '\'' + + ", bank_name='" + bank_name + '\'' + + ", bank_address='" + bank_address + '\'' + + ", bank_country_name='" + bank_country_name + '\'' + + ", account_name='" + account_name + '\'' + + ", account_address='" + account_address + '\'' + + ", reference='" + reference + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/products/ProductService.java b/api/src/main/java/com/coinbase/exchange/api/products/ProductService.java index 77d36930..c9a63b5c 100644 --- a/api/src/main/java/com/coinbase/exchange/api/products/ProductService.java +++ b/api/src/main/java/com/coinbase/exchange/api/products/ProductService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.products; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.Candles; import com.coinbase.exchange.model.Granularity; import com.coinbase.exchange.model.Product; @@ -29,17 +30,17 @@ public ProductService(final CoinbaseExchange exchange) { } // no paged products necessary - public List getProducts() { + public List getProducts() throws CoinbaseExchangeException { return exchange.getAsList(PRODUCTS_ENDPOINT, new ParameterizedTypeReference() { }); } - public Candles getCandles(String productId) { + public Candles getCandles(String productId) throws CoinbaseExchangeException { return new Candles(exchange.get(PRODUCTS_ENDPOINT + "/" + productId + "/candles", new ParameterizedTypeReference>() { })); } - public Candles getCandles(String productId, Map queryParams) { + public Candles getCandles(String productId, Map queryParams) throws CoinbaseExchangeException { StringBuffer url = new StringBuffer(PRODUCTS_ENDPOINT + "/" + productId + "/candles"); if (queryParams != null && queryParams.size() != 0) { url.append("?"); @@ -54,7 +55,8 @@ public Candles getCandles(String productId, Map queryParams) { * If either one of the start or end fields are not provided then both fields will be ignored. * If a custom time range is not declared then one ending now is selected. */ - public Candles getCandles(String productId, Instant startTime, Instant endTime, Granularity granularity) { + public Candles getCandles(String productId, Instant startTime, Instant endTime, Granularity granularity) + throws CoinbaseExchangeException { Map queryParams = new HashMap<>(); @@ -74,14 +76,14 @@ public Candles getCandles(String productId, Instant startTime, Instant endTime, /** * The granularity field must be one of the following values: {60, 300, 900, 3600, 21600, 86400} */ - public Candles getCandles(String productId, Granularity granularity) { + public Candles getCandles(String productId, Granularity granularity) throws CoinbaseExchangeException { return getCandles(productId, null, null, granularity); } /** * If either one of the start or end fields are not provided then both fields will be ignored. */ - public Candles getCandles(String productId, Instant start, Instant end) { + public Candles getCandles(String productId, Instant start, Instant end) throws CoinbaseExchangeException { return getCandles(productId, start, end, null); } } diff --git a/api/src/main/java/com/coinbase/exchange/api/reports/ReportRequest.java b/api/src/main/java/com/coinbase/exchange/api/reports/ReportRequest.java index af9775b3..4ba2eb38 100644 --- a/api/src/main/java/com/coinbase/exchange/api/reports/ReportRequest.java +++ b/api/src/main/java/com/coinbase/exchange/api/reports/ReportRequest.java @@ -40,4 +40,13 @@ public String getEnd_date() { public void setEnd_date(String end_date) { this.end_date = end_date; } + + @Override + public String toString() { + return "ReportRequest{" + + "type='" + type + '\'' + + ", start_date='" + start_date + '\'' + + ", end_date='" + end_date + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/reports/ReportResponse.java b/api/src/main/java/com/coinbase/exchange/api/reports/ReportResponse.java index 2cfca30d..6533bca9 100644 --- a/api/src/main/java/com/coinbase/exchange/api/reports/ReportResponse.java +++ b/api/src/main/java/com/coinbase/exchange/api/reports/ReportResponse.java @@ -97,4 +97,18 @@ public TimePeriod getParams() { public void setParams(TimePeriod params) { this.params = params; } + + @Override + public String toString() { + return "ReportResponse{" + + "id='" + id + '\'' + + ", type='" + type + '\'' + + ", status='" + status + '\'' + + ", created_at='" + created_at + '\'' + + ", completed_at='" + completed_at + '\'' + + ", expires_at='" + expires_at + '\'' + + ", file_url='" + file_url + '\'' + + ", params=" + params + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/reports/ReportService.java b/api/src/main/java/com/coinbase/exchange/api/reports/ReportService.java index 2035f0bc..67440549 100644 --- a/api/src/main/java/com/coinbase/exchange/api/reports/ReportService.java +++ b/api/src/main/java/com/coinbase/exchange/api/reports/ReportService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.reports; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.springframework.core.ParameterizedTypeReference; /** @@ -17,13 +18,13 @@ public ReportService(final CoinbaseExchange coinbaseExchange) { } // TODO untested - public ReportResponse createReport(String type, String startDate, String endDate){ + public ReportResponse createReport(String type, String startDate, String endDate) throws CoinbaseExchangeException { ReportRequest reportRequest = new ReportRequest(type, startDate, endDate); return coinbaseExchange.post(REPORTS_ENDPOINT, new ParameterizedTypeReference(){}, reportRequest); } // TODO untested - public ReportResponse getReportStatus(String id) { + public ReportResponse getReportStatus(String id) throws CoinbaseExchangeException { return coinbaseExchange.get(REPORTS_ENDPOINT + "/" + id, new ParameterizedTypeReference(){}); } } diff --git a/api/src/main/java/com/coinbase/exchange/api/reports/TimePeriod.java b/api/src/main/java/com/coinbase/exchange/api/reports/TimePeriod.java index a3e8713c..650aa982 100644 --- a/api/src/main/java/com/coinbase/exchange/api/reports/TimePeriod.java +++ b/api/src/main/java/com/coinbase/exchange/api/reports/TimePeriod.java @@ -30,4 +30,12 @@ public String getEnd_date() { public void setEnd_date(String end_date) { this.end_date = end_date; } + + @Override + public String toString() { + return "TimePeriod{" + + "start_date='" + start_date + '\'' + + ", end_date='" + end_date + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/transfers/Transfer.java b/api/src/main/java/com/coinbase/exchange/api/transfers/Transfer.java index 8dd0a382..8c1e4799 100644 --- a/api/src/main/java/com/coinbase/exchange/api/transfers/Transfer.java +++ b/api/src/main/java/com/coinbase/exchange/api/transfers/Transfer.java @@ -42,4 +42,13 @@ public String getCoinbase_account_id() { public void setCoinbase_account_id(String coinbase_account_id) { this.coinbase_account_id = coinbase_account_id; } + + @Override + public String toString() { + return "Transfer{" + + "type='" + type + '\'' + + ", amount=" + amount + + ", coinbase_account_id='" + coinbase_account_id + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/transfers/TransferService.java b/api/src/main/java/com/coinbase/exchange/api/transfers/TransferService.java index 57010abb..2bcdf63f 100644 --- a/api/src/main/java/com/coinbase/exchange/api/transfers/TransferService.java +++ b/api/src/main/java/com/coinbase/exchange/api/transfers/TransferService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.transfers; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.springframework.core.ParameterizedTypeReference; import java.math.BigDecimal; @@ -28,7 +29,7 @@ public TransferService(final CoinbaseExchange coinbaseExchange) { * @param coinbaseAccountId * @return */ - public String transfer(String type, BigDecimal amount, String coinbaseAccountId) { + public String transfer(String type, BigDecimal amount, String coinbaseAccountId) throws CoinbaseExchangeException { return coinbaseExchange.post(TRANSFER_ENDPOINT, new ParameterizedTypeReference(){}, new Transfer(type, amount, coinbaseAccountId)); diff --git a/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountData.java b/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountData.java index acd344ba..7ace0f67 100644 --- a/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountData.java +++ b/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountData.java @@ -52,4 +52,14 @@ public String getRecorded_at() { public void setRecorded_at(String recorded_at) { this.recorded_at = recorded_at; } + + @Override + public String toString() { + return "UserAccountData{" + + "product_id='" + product_id + '\'' + + ", exchange_volume=" + exchange_volume + + ", volume=" + volume + + ", recorded_at='" + recorded_at + '\'' + + '}'; + } } diff --git a/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountService.java b/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountService.java index 3b38a69d..fab7a9d9 100644 --- a/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountService.java +++ b/api/src/main/java/com/coinbase/exchange/api/useraccount/UserAccountService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.useraccount; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.springframework.core.ParameterizedTypeReference; import java.util.List; @@ -22,7 +23,7 @@ public UserAccountService(final CoinbaseExchange coinbaseExchange) { * Returns the 30 day trailing volume information from all accounts * @return UserAccountData */ - public List getTrailingVolume(){ + public List getTrailingVolume() throws CoinbaseExchangeException { return coinbaseExchange.getAsList(USER_ACCOUNT_ENDPOINT, new ParameterizedTypeReference() {}); } } diff --git a/api/src/main/java/com/coinbase/exchange/api/withdrawals/WithdrawalsService.java b/api/src/main/java/com/coinbase/exchange/api/withdrawals/WithdrawalsService.java index 56869460..06c67f82 100644 --- a/api/src/main/java/com/coinbase/exchange/api/withdrawals/WithdrawalsService.java +++ b/api/src/main/java/com/coinbase/exchange/api/withdrawals/WithdrawalsService.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.api.withdrawals; import com.coinbase.exchange.api.exchange.CoinbaseExchange; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.CoinbasePaymentRequest; import com.coinbase.exchange.model.CryptoPaymentRequest; import com.coinbase.exchange.model.MonetaryRequest; @@ -27,25 +28,29 @@ public WithdrawalsService(final CoinbaseExchange coinbaseExchange) { this.coinbaseExchange = coinbaseExchange; } - public PaymentResponse makeWithdrawalToPaymentMethod(BigDecimal amount, String currency, String paymentMethodId) { + public PaymentResponse makeWithdrawalToPaymentMethod(BigDecimal amount, String currency, String paymentMethodId) + throws CoinbaseExchangeException { PaymentRequest request = new PaymentRequest(amount, currency, paymentMethodId); return makeWithdrawal(request, PAYMENT_METHOD); } // TODO untested - needs coinbase account ID to work. - public PaymentResponse makeWithdrawalToCoinbase(BigDecimal amount, String currency, String coinbaseAccountId) { + public PaymentResponse makeWithdrawalToCoinbase(BigDecimal amount, String currency, String coinbaseAccountId) + throws CoinbaseExchangeException { CoinbasePaymentRequest request = new CoinbasePaymentRequest(amount.setScale(8, RoundingMode.HALF_DOWN), currency, coinbaseAccountId); return makeWithdrawal(request, COINBASE); } // TODO untested - needs a crypto currency account address - public PaymentResponse makeWithdrawalToCryptoAccount(BigDecimal amount, String currency, String cryptoAccountAddress) { + public PaymentResponse makeWithdrawalToCryptoAccount(BigDecimal amount, String currency, String cryptoAccountAddress) + throws CoinbaseExchangeException { CryptoPaymentRequest request = new CryptoPaymentRequest(amount.setScale(8, RoundingMode.HALF_DOWN), currency, cryptoAccountAddress); return makeWithdrawal(request, CRYPTO); } - private PaymentResponse makeWithdrawal(MonetaryRequest request, String withdrawalType) { + private PaymentResponse makeWithdrawal(MonetaryRequest request, String withdrawalType) + throws CoinbaseExchangeException { return coinbaseExchange.post(WITHDRAWALS_ENDPOINT+ withdrawalType, new ParameterizedTypeReference() {}, request); diff --git a/api/src/test/java/com/coinbase/exchange/api/accounts/AccountsIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/accounts/AccountsIntegrationTest.java index 5462cd06..ad240246 100644 --- a/api/src/test/java/com/coinbase/exchange/api/accounts/AccountsIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/accounts/AccountsIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.Hold; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -31,27 +32,27 @@ void setUp() { } @Test - public void canGetAccounts() { + public void canGetAccounts() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); assertNotNull(accounts); } @Test - public void getAccount() { + public void getAccount() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); Account account = accountService.getAccount(accounts.get(0).getId()); assertNotNull(account); } @Test - public void canGetAccountHistory() { + public void canGetAccountHistory() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); List history = accountService.getAccountHistory(accounts.get(0).getId()); assertNotNull(history); // anything but null/error. } @Test - public void canGetAccountHolds() { + public void canGetAccountHolds() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); List holds = accountService.getHolds(accounts.get(0).getId()); assertNotNull(holds); @@ -66,7 +67,7 @@ public void canGetAccountHolds() { * only if before is null and after is not-null will the after param be inserted. */ @Test - public void canGetPagedAccountHistory() { + public void canGetPagedAccountHistory() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); assertTrue(accounts.size() > 0); String beforeOrAfter = "before"; @@ -79,7 +80,7 @@ public void canGetPagedAccountHistory() { } @Test - public void canGetPagedHolds() { + public void canGetPagedHolds() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); assertTrue(accounts!=null); diff --git a/api/src/test/java/com/coinbase/exchange/api/accounts/DepositIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/accounts/DepositIntegrationTest.java index 8f142deb..2516ca19 100644 --- a/api/src/test/java/com/coinbase/exchange/api/accounts/DepositIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/accounts/DepositIntegrationTest.java @@ -3,6 +3,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; import com.coinbase.exchange.api.deposits.DepositService; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.api.payments.CoinbaseAccount; import com.coinbase.exchange.api.payments.PaymentService; import com.coinbase.exchange.model.PaymentResponse; @@ -43,7 +44,7 @@ void setUp() { } @Test - public void depositToGDAXExchangeFromCoinbase(){ + public void depositToGDAXExchangeFromCoinbase() throws CoinbaseExchangeException { // given List coinbaseAccountList = paymentService.getCoinbaseAccounts(); assertTrue(coinbaseAccountList.size() > 0); diff --git a/api/src/test/java/com/coinbase/exchange/api/accounts/UserAccountServiceIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/accounts/UserAccountServiceIntegrationTest.java index fb9f61b4..8f2eb7c5 100644 --- a/api/src/test/java/com/coinbase/exchange/api/accounts/UserAccountServiceIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/accounts/UserAccountServiceIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.api.useraccount.UserAccountData; import com.coinbase.exchange.api.useraccount.UserAccountService; import org.junit.jupiter.api.BeforeEach; @@ -32,7 +33,7 @@ void setUp() { * Trailing volume could be empty so all we have to do is make sure it's not returning null */ @Test - public void getTrailingVolume(){ + public void getTrailingVolume() throws CoinbaseExchangeException { List data = userAccountService.getTrailingVolume(); assertNotNull(data); } diff --git a/api/src/test/java/com/coinbase/exchange/api/accounts/WithdrawalIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/accounts/WithdrawalIntegrationTest.java index 429897e0..56cc90cd 100644 --- a/api/src/test/java/com/coinbase/exchange/api/accounts/WithdrawalIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/accounts/WithdrawalIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.api.payments.CoinbaseAccount; import com.coinbase.exchange.api.payments.PaymentService; import com.coinbase.exchange.api.payments.PaymentType; @@ -45,7 +46,7 @@ void setUp() { } @Test - public void withdrawToCoinbaseAccount(){ + public void withdrawToCoinbaseAccount() throws CoinbaseExchangeException { List gdaxAccounts = accountService.getAccounts(); List paymentTypes = paymentService.getPaymentTypes(); List coinbaseAccounts = paymentService.getCoinbaseAccounts(); diff --git a/api/src/test/java/com/coinbase/exchange/api/authentication/AuthenticationIntegrationIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/authentication/AuthenticationIntegrationIntegrationTest.java index 4eb3d7f7..451b9370 100644 --- a/api/src/test/java/com/coinbase/exchange/api/authentication/AuthenticationIntegrationIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/authentication/AuthenticationIntegrationIntegrationTest.java @@ -4,6 +4,7 @@ import com.coinbase.exchange.api.accounts.Account; import com.coinbase.exchange.api.accounts.AccountService; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -34,7 +35,7 @@ void setUp() { // ensure a basic request can be made. Not a great test. Improve. @Test - public void simpleAuthenticationTest(){ + public void simpleAuthenticationTest() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); assertNotNull(accounts); assertTrue(accounts.size() > 0); diff --git a/api/src/test/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeExceptionTest.java b/api/src/test/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeExceptionTest.java new file mode 100644 index 00000000..bcb4f119 --- /dev/null +++ b/api/src/test/java/com/coinbase/exchange/api/exchange/CoinbaseExchangeExceptionTest.java @@ -0,0 +1,53 @@ +package com.coinbase.exchange.api.exchange; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.sameInstance; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.web.client.HttpClientErrorException; + +@JsonTest +@ContextConfiguration(classes = IntegrationTestConfiguration.class) +class CoinbaseExchangeExceptionTest { + @Autowired + ObjectMapper objectMapper; + + @Test + void createBuildInstanceWithMessage() { + HttpClientErrorException httpException = mock(HttpClientErrorException.class); + + when(httpException.getResponseBodyAsString()).thenReturn("{\"message\": \"error\"}"); + + CoinbaseExchangeException result = CoinbaseExchangeException.create(httpException, objectMapper); + + assertAll( + () -> assertThat(result.getMessage(), is(equalTo("error"))), + () -> assertThat(result.getCause(), is(sameInstance(httpException))) + ); + } + + @Test + void createBuildInstanceWithoutMessageWhenInvalid() { + HttpClientErrorException httpException = mock(HttpClientErrorException.class); + + when(httpException.getResponseBodyAsString()).thenReturn("{\"message\": error\"}"); + + CoinbaseExchangeException result = CoinbaseExchangeException.create(httpException, objectMapper); + + assertAll( + () -> assertThat(result.getMessage(), is(nullValue())), + () -> assertThat(result.getCause(), is(sameInstance(httpException))) + ); + } +} diff --git a/api/src/test/java/com/coinbase/exchange/api/marketdata/MarketDataIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/marketdata/MarketDataIntegrationTest.java index 72bad58b..d49835c0 100644 --- a/api/src/test/java/com/coinbase/exchange/api/marketdata/MarketDataIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/marketdata/MarketDataIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.api.products.ProductService; import com.coinbase.exchange.model.Product; import org.junit.jupiter.api.BeforeEach; @@ -34,14 +35,14 @@ void setUp() { } @Test - public void canGetMarketDataForLevelOneBidAndAsk() { + public void canGetMarketDataForLevelOneBidAndAsk() throws CoinbaseExchangeException { MarketData marketData = testee.getMarketDataOrderBook("BTC-GBP", 1); System.out.println(marketData); assertTrue(marketData.getSequence() > 0); } @Test - public void canGetMarketDataForLevelTwoBidAndAsk() { + public void canGetMarketDataForLevelTwoBidAndAsk() throws CoinbaseExchangeException { MarketData marketData = testee.getMarketDataOrderBook("BTC-GBP", 2); System.out.println(marketData); assertTrue(marketData.getSequence() > 0); @@ -52,14 +53,14 @@ public void canGetMarketDataForLevelTwoBidAndAsk() { * order Id rather than the count of orders at a certain price. */ @Test - public void canGetMarketDataForLevelThreeBidAndAsk() { + public void canGetMarketDataForLevelThreeBidAndAsk() throws CoinbaseExchangeException { MarketData marketData = testee.getMarketDataOrderBook("BTC-GBP", 3); System.out.println(marketData); assertTrue(marketData.getSequence() > 0); } @Test - public void canGetLevel1DataForAllProducts(){ + public void canGetLevel1DataForAllProducts() throws CoinbaseExchangeException { List products = productService.getProducts(); for(Product product : products){ System.out.print("\nTesting: " + product.getId()); diff --git a/api/src/test/java/com/coinbase/exchange/api/marketdata/OrderItemDeserializerTest.java b/api/src/test/java/com/coinbase/exchange/api/marketdata/OrderItemDeserializerTest.java index 1feec026..68cdc0a2 100644 --- a/api/src/test/java/com/coinbase/exchange/api/marketdata/OrderItemDeserializerTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/marketdata/OrderItemDeserializerTest.java @@ -1,5 +1,6 @@ package com.coinbase.exchange.api.marketdata; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; @@ -19,7 +20,7 @@ public class OrderItemDeserializerTest { * @throws IOException */ @Test - public void testDesirialization() throws IOException { + public void testDesirialization() throws CoinbaseExchangeException, IOException { String test = "{\n" + " \"sequence\": \"3\",\n" + " \"bids\": [\n" + @@ -37,4 +38,4 @@ public void testDesirialization() throws IOException { assertEquals(marketData.getBids().size(), 2); assertEquals(marketData.getSequence(), 3L); } -} \ No newline at end of file +} diff --git a/api/src/test/java/com/coinbase/exchange/api/orders/OrderIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/orders/OrderIntegrationTest.java index 71c25785..8835cbf4 100644 --- a/api/src/test/java/com/coinbase/exchange/api/orders/OrderIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/orders/OrderIntegrationTest.java @@ -4,6 +4,7 @@ import com.coinbase.exchange.api.accounts.Account; import com.coinbase.exchange.api.accounts.AccountService; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.api.marketdata.MarketData; import com.coinbase.exchange.api.marketdata.MarketDataService; import com.coinbase.exchange.api.products.ProductService; @@ -63,7 +64,7 @@ void setUp() { * Note: You'll need credit available in your test account */ @Ignore - public void canMakeLimitOrderAndGetTheOrderAndCancelIt() { + public void canMakeLimitOrderAndGetTheOrderAndCancelIt() throws CoinbaseExchangeException { List accounts = accountService.getAccounts(); Optional accountsWithMoreThanZeroCoinsAvailable = accounts.stream() .filter(account -> account.getBalance().compareTo(BigDecimal.ONE) > 0 && account.getCurrency().contains("BTC")) @@ -101,25 +102,25 @@ public void canMakeLimitOrderAndGetTheOrderAndCancelIt() { } @Test - public void cancelAllOrders() { + public void cancelAllOrders() throws CoinbaseExchangeException { List cancelledOrders = testee.cancelAllOpenOrders(); assertTrue(cancelledOrders.size() >= 0); } @Test - public void getAllOpenOrders() { + public void getAllOpenOrders() throws CoinbaseExchangeException { List openOrders = testee.getOpenOrders(); assertTrue(openOrders.size() >= 0); } @Test - public void getFillsByProductId() { + public void getFillsByProductId() throws CoinbaseExchangeException { List fills = testee.getFillsByProductId("BTC-USD", 100); assertTrue(fills.size() >= 0); } @Ignore - public void shouldGetFilledByOrderIdWhenMakingMarketOrderBuy() { + public void shouldGetFilledByOrderIdWhenMakingMarketOrderBuy() throws CoinbaseExchangeException { NewMarketOrderSingle marketOrder = createNewMarketOrder("BTC-USD", "buy", new BigDecimal(0.01)); Order order = testee.createOrder(marketOrder); @@ -129,7 +130,7 @@ public void shouldGetFilledByOrderIdWhenMakingMarketOrderBuy() { } @Ignore - public void createMarketOrderBuy() { + public void createMarketOrderBuy() throws CoinbaseExchangeException { NewMarketOrderSingle marketOrder = createNewMarketOrder("BTC-USD", "buy", new BigDecimal(0.01)); Order order = testee.createOrder(marketOrder); @@ -144,7 +145,7 @@ public void createMarketOrderBuy() { } @Ignore - public void createMarketOrderSell() { + public void createMarketOrderSell() throws CoinbaseExchangeException { NewMarketOrderSingle marketOrder = createNewMarketOrder("BTC-USD", "sell", new BigDecimal(0.01)); Order order = testee.createOrder(marketOrder); assertNotNull(order); //make sure we created an order @@ -165,7 +166,7 @@ private NewMarketOrderSingle createNewMarketOrder(String product, String action, return marketOrder; } - private MarketData getMarketDataOrderBook(String product) { + private MarketData getMarketDataOrderBook(String product) throws CoinbaseExchangeException { return marketDataService.getMarketDataOrderBook(product, 1); } diff --git a/api/src/test/java/com/coinbase/exchange/api/payments/PaymentIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/payments/PaymentIntegrationTest.java index 9cd5a5af..020d0dfc 100644 --- a/api/src/test/java/com/coinbase/exchange/api/payments/PaymentIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/payments/PaymentIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -24,12 +25,12 @@ void setUp() { } @Test - public void hasAvailablePayments(){ + public void hasAvailablePayments() throws CoinbaseExchangeException { List types = testee.getPaymentTypes(); assertTrue(types.size() > 0); } @Test - public void hasCoinbaseAccounts(){ + public void hasCoinbaseAccounts() throws CoinbaseExchangeException { List accounts = testee.getCoinbaseAccounts(); assertTrue(accounts.size() > 0); } diff --git a/api/src/test/java/com/coinbase/exchange/api/products/ProductsIntegrationTest.java b/api/src/test/java/com/coinbase/exchange/api/products/ProductsIntegrationTest.java index 04f59e08..e0b9237a 100644 --- a/api/src/test/java/com/coinbase/exchange/api/products/ProductsIntegrationTest.java +++ b/api/src/test/java/com/coinbase/exchange/api/products/ProductsIntegrationTest.java @@ -2,6 +2,7 @@ import com.coinbase.exchange.api.BaseIntegrationTest; import com.coinbase.exchange.api.config.IntegrationTestConfiguration; +import com.coinbase.exchange.api.exchange.CoinbaseExchangeException; import com.coinbase.exchange.model.Candles; import com.coinbase.exchange.model.Granularity; import com.coinbase.exchange.model.Product; @@ -44,21 +45,21 @@ void setUp() { } @Test - public void canGetProducts() { + public void canGetProducts() throws CoinbaseExchangeException { List products = productService.getProducts(); products.forEach(item -> System.out.println(item.getId())); assertTrue(products.size() >= 0); } @Test - void shouldGetCandles() { + void shouldGetCandles() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID); assertEquals(300, candles.getCandleList().size()); } @Test - void shouldGetCandlesForAGanularityOf_OneDay() { + void shouldGetCandlesForAGanularityOf_OneDay() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.ONE_DAY); assertEquals(300, candles.getCandleList().size()); @@ -66,7 +67,7 @@ void shouldGetCandlesForAGanularityOf_OneDay() { } @Test - void shouldGetCandlesForAGanularityOf_SixHours() { + void shouldGetCandlesForAGanularityOf_SixHours() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.SIX_HOURS); assertEquals(300, candles.getCandleList().size()); @@ -74,7 +75,7 @@ void shouldGetCandlesForAGanularityOf_SixHours() { } @Test - void shouldGetCandlesForAGanularityOf_OneHour() { + void shouldGetCandlesForAGanularityOf_OneHour() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.ONE_HOUR); assertEquals(300, candles.getCandleList().size()); @@ -82,7 +83,7 @@ void shouldGetCandlesForAGanularityOf_OneHour() { } @Test - void shouldGetCandlesForAGanularityOf_FifteenMins() { + void shouldGetCandlesForAGanularityOf_FifteenMins() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.FIFTEEN_MIN); assertEquals(300, candles.getCandleList().size()); @@ -90,7 +91,7 @@ void shouldGetCandlesForAGanularityOf_FifteenMins() { } @Test - void shouldGetCandlesForAGanularityOf_FiveMins() { + void shouldGetCandlesForAGanularityOf_FiveMins() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.FIVE_MIN); assertEquals(300, candles.getCandleList().size()); @@ -98,7 +99,7 @@ void shouldGetCandlesForAGanularityOf_FiveMins() { } @Test - void shouldGetCandlesForAGanularityOf_OneMin() { + void shouldGetCandlesForAGanularityOf_OneMin() throws CoinbaseExchangeException { Candles candles = productService.getCandles(TEST_PRODUCT_ID, Granularity.ONE_MIN); assertEquals(300, candles.getCandleList().size()); @@ -106,7 +107,7 @@ void shouldGetCandlesForAGanularityOf_OneMin() { } @Test - void shouldGetCandlesForWithAStartAndEndTime() { + void shouldGetCandlesForWithAStartAndEndTime() throws CoinbaseExchangeException { Instant startTime = Instant.now().minus(400, ChronoUnit.DAYS); Instant endTime = Instant.now().minus(100, ChronoUnit.DAYS); diff --git a/build.gradle b/build.gradle index b7fe9f3f..9eef8bef 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,7 @@ -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:5.1.0' - } +plugins { + id 'com.github.johnrengelman.shadow' version '6.1.0' } -apply plugin: 'com.github.johnrengelman.shadow' - wrapper { distributionType = Wrapper.DistributionType.ALL } @@ -36,48 +29,18 @@ allprojects { } } -subprojects { } - -// apply dependency constraints to all java modules -configure(subprojects.findAll { true }) { - - sourceCompatibility = 1.11 - targetCompatibility = 1.11 +subprojects { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 dependencies { - constraints { - implementation 'com.fasterxml.jackson.core:jackson-core:2.11.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.11.0' - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0' - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0' - implementation 'org.slf4j:slf4j-api:1.7.28' - implementation 'ch.qos.logback:logback-classic:1.2.3' - implementation 'ch.qos.logback:logback-core:1.2.3' - implementation 'org.springframework.boot:spring-boot-starter-web:2.2.7.RELEASE' - implementation 'org.springframework:spring-context:5.2.6.RELEASE' - - // -------------------------------------- - testImplementation 'junit:junit:4.12' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.5.2' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.5.2' - testImplementation 'org.junit.platform:junit-platform-suite-api:1.3.2' - - testImplementation 'org.springframework.boot:spring-boot-test:2.2.7.RELEASE' - testImplementation 'org.springframework.boot:spring-boot-starter-test:2.2.7.RELEASE' - - testImplementation 'org.mockito:mockito-core:3.0.0' - testImplementation 'org.mockito:mockito-junit-jupiter:3.0.0' - - testImplementation 'org.assertj:assertj-core:3.13.2' - } + implementation platform('org.springframework.boot:spring-boot-dependencies:2.4.3') } } dependencies { - compile project(":api") - compile project(":model") - compile project(":security") - compile project(":websocketfeed") + implementation project(":api") + implementation project(":model") + implementation project(":security") + implementation project(":websocketfeed") } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e3e27e60..5c2d1cf0 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a0bb991a..8cf6eb5a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jan 20 14:01:00 GMT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-all.zip diff --git a/gradlew b/gradlew index 4453ccea..b0d6d0ab 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,16 +44,16 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +171,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/gradlew.bat b/gradlew.bat index e95643d6..15e1ee37 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/model/src/main/java/com/coinbase/exchange/model/Candle.java b/model/src/main/java/com/coinbase/exchange/model/Candle.java index 97652ec0..fe15a5d2 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Candle.java +++ b/model/src/main/java/com/coinbase/exchange/model/Candle.java @@ -13,20 +13,22 @@ public class Candle { private BigDecimal volume; public Candle(String[] entry) { - this(Instant.ofEpochSecond(Long.parseLong(entry[0])), + this( + Instant.ofEpochSecond(Long.parseLong(entry[0])), new BigDecimal(entry[1]), new BigDecimal(entry[2]), new BigDecimal(entry[3]), new BigDecimal(entry[4]), - new BigDecimal(entry[5])); + new BigDecimal(entry[5]) + ); } public Candle(Instant time, BigDecimal low, BigDecimal high, BigDecimal open, BigDecimal close, BigDecimal volume) { - this.time = time; - this.low = low; - this.high = high; - this.open = open; - this.close = close; + this.time = time; + this.low = low; + this.high = high; + this.open = open; + this.close = close; this.volume = volume; } @@ -77,4 +79,16 @@ public void setClose(BigDecimal close) { public void setVolume(BigDecimal volume) { this.volume = volume; } + + @Override + public String toString() { + return "Candle{" + + "time=" + time + + ", low=" + low + + ", high=" + high + + ", open=" + open + + ", close=" + close + + ", volume=" + volume + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Candles.java b/model/src/main/java/com/coinbase/exchange/model/Candles.java index 4f73ff41..0cae643a 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Candles.java +++ b/model/src/main/java/com/coinbase/exchange/model/Candles.java @@ -14,4 +14,11 @@ public Candles(List candles) { public List getCandleList() { return candleList; } + + @Override + public String toString() { + return "Candles{" + + "candleList=" + candleList + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/CoinbasePaymentRequest.java b/model/src/main/java/com/coinbase/exchange/model/CoinbasePaymentRequest.java index aff6e5aa..96bcb4f3 100644 --- a/model/src/main/java/com/coinbase/exchange/model/CoinbasePaymentRequest.java +++ b/model/src/main/java/com/coinbase/exchange/model/CoinbasePaymentRequest.java @@ -16,10 +16,22 @@ public CoinbasePaymentRequest(BigDecimal amount, String currency, String coinbas this.payment_method_id = coinbase_account_id; //Duplicated field for gdax compliance, I believe //We could probably remove coinbase_account_id but there are no tests for this specific thing } + public String getCoinbase_account_id() { return coinbase_account_id; } + public void setCoinbase_account_id(String coinbase_account_id) { this.coinbase_account_id = coinbase_account_id; } + + @Override + public String toString() { + return "CoinbasePaymentRequest{" + + "coinbase_account_id='" + coinbase_account_id + '\'' + + ", payment_method_id='" + payment_method_id + '\'' + + ", amount=" + amount + + ", currency='" + currency + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/CryptoPaymentRequest.java b/model/src/main/java/com/coinbase/exchange/model/CryptoPaymentRequest.java index fcca671c..708396c2 100644 --- a/model/src/main/java/com/coinbase/exchange/model/CryptoPaymentRequest.java +++ b/model/src/main/java/com/coinbase/exchange/model/CryptoPaymentRequest.java @@ -9,10 +9,21 @@ public CryptoPaymentRequest(BigDecimal amount, String currency, String cryptoAdd super(amount, currency); this.crypto_address = cryptoAddress; } + public String getCryptoAddress() { return crypto_address; } + public void setCryptoAddress(String cryptoAddress) { this.crypto_address = cryptoAddress; } + + @Override + public String toString() { + return "CryptoPaymentRequest{" + + "crypto_address='" + crypto_address + '\'' + + ", amount=" + amount + + ", currency='" + currency + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Currency.java b/model/src/main/java/com/coinbase/exchange/model/Currency.java index 8337af75..30585cf9 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Currency.java +++ b/model/src/main/java/com/coinbase/exchange/model/Currency.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.math.BigDecimal; +import java.util.Arrays; @JsonIgnoreProperties(ignoreUnknown = true) public class Currency { @@ -103,4 +104,19 @@ public Object getDetails() { public void setDetails(Object details) { this.details = details; } + + @Override + public String toString() { + return "Currency{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", min_size=" + min_size + + ", status='" + status + '\'' + + ", status_message='" + status_message + '\'' + + ", max_precision=" + max_precision + + ", convertible_to=" + Arrays.toString(convertible_to) + + ", funding_account_id='" + funding_account_id + '\'' + + ", details=" + details + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Detail.java b/model/src/main/java/com/coinbase/exchange/model/Detail.java index 70298865..34ac98b4 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Detail.java +++ b/model/src/main/java/com/coinbase/exchange/model/Detail.java @@ -31,4 +31,13 @@ public String getProduct_id() { public void setProduct_id(String product_id) { this.product_id = product_id; } + + @Override + public String toString() { + return "Detail{" + + "order_id='" + order_id + '\'' + + ", trade_id=" + trade_id + + ", product_id='" + product_id + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Fill.java b/model/src/main/java/com/coinbase/exchange/model/Fill.java index d2d6b312..6453144c 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Fill.java +++ b/model/src/main/java/com/coinbase/exchange/model/Fill.java @@ -1,6 +1,7 @@ package com.coinbase.exchange.model; import java.math.BigDecimal; +import java.time.Instant; /** * Created by irufus on 2/18/15. @@ -8,9 +9,10 @@ public class Fill { private Integer trade_id; private String product_id; + private BigDecimal price; private BigDecimal size; private String order_id; - private String created_at; + private Instant created_at; private String liquidity; private BigDecimal fee; private Boolean settled; @@ -40,11 +42,11 @@ public void setFee(BigDecimal fee) { this.fee = fee; } - public String getCreated_at() { + public Instant getCreated_at() { return created_at; } - public void setCreated_at(String created_at) { + public void setCreated_at(Instant created_at) { this.created_at = created_at; } @@ -87,4 +89,28 @@ public Integer getTrade_id() { public void setTrade_id(Integer trade_id) { this.trade_id = trade_id; } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(final BigDecimal price) { + this.price = price; + } + + @Override + public String toString() { + return "Fill{" + + "trade_id=" + trade_id + + ", product_id='" + product_id + '\'' + + ", price=" + price + + ", size=" + size + + ", order_id='" + order_id + '\'' + + ", created_at=" + created_at + + ", liquidity='" + liquidity + '\'' + + ", fee=" + fee + + ", settled=" + settled + + ", side='" + side + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Granularity.java b/model/src/main/java/com/coinbase/exchange/model/Granularity.java index 63696e3e..60798a27 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Granularity.java +++ b/model/src/main/java/com/coinbase/exchange/model/Granularity.java @@ -29,4 +29,11 @@ public String get(){ } return ""; } + + @Override + public String toString() { + return "Granularity{" + + "granularity='" + granularity + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Hold.java b/model/src/main/java/com/coinbase/exchange/model/Hold.java index 70bb0ec4..9fb6065e 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Hold.java +++ b/model/src/main/java/com/coinbase/exchange/model/Hold.java @@ -82,4 +82,17 @@ public String getRef() { public void setRef(String ref) { this.ref = ref; } + + @Override + public String toString() { + return "Hold{" + + "id='" + id + '\'' + + ", account_id='" + account_id + '\'' + + ", created_at='" + created_at + '\'' + + ", update_at='" + update_at + '\'' + + ", amount=" + amount + + ", type='" + type + '\'' + + ", ref='" + ref + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/NewLimitOrderSingle.java b/model/src/main/java/com/coinbase/exchange/model/NewLimitOrderSingle.java index dbb61980..3b0bd356 100644 --- a/model/src/main/java/com/coinbase/exchange/model/NewLimitOrderSingle.java +++ b/model/src/main/java/com/coinbase/exchange/model/NewLimitOrderSingle.java @@ -62,4 +62,18 @@ public void setSize(BigDecimal size) { this.size = size; } + @Override + public String toString() { + return "NewLimitOrderSingle{" + + "size=" + size + + ", price=" + price + + ", post_only=" + post_only + + ", client_oid='" + client_oid + '\'' + + ", type='" + type + '\'' + + ", side='" + side + '\'' + + ", product_id='" + product_id + '\'' + + ", stp='" + stp + '\'' + + ", funds='" + funds + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/NewMarketOrderSingle.java b/model/src/main/java/com/coinbase/exchange/model/NewMarketOrderSingle.java index 135d0841..ffce6ef3 100644 --- a/model/src/main/java/com/coinbase/exchange/model/NewMarketOrderSingle.java +++ b/model/src/main/java/com/coinbase/exchange/model/NewMarketOrderSingle.java @@ -25,4 +25,16 @@ public void setSize(BigDecimal size) { this.size = size; } + @Override + public String toString() { + return "NewMarketOrderSingle{" + + "size=" + size + + ", client_oid='" + client_oid + '\'' + + ", type='" + type + '\'' + + ", side='" + side + '\'' + + ", product_id='" + product_id + '\'' + + ", stp='" + stp + '\'' + + ", funds='" + funds + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/NewOrderSingle.java b/model/src/main/java/com/coinbase/exchange/model/NewOrderSingle.java index a50334d8..c364913c 100644 --- a/model/src/main/java/com/coinbase/exchange/model/NewOrderSingle.java +++ b/model/src/main/java/com/coinbase/exchange/model/NewOrderSingle.java @@ -24,12 +24,12 @@ */ public abstract class NewOrderSingle { - private String client_oid; //optional - private String type; //default is limit, other types are market and stop - private String side; - private String product_id; - private String stp; //optional: values are dc, co , cn , cb - private String funds; + protected String client_oid; //optional + protected String type; //default is limit, other types are market and stop + protected String side; + protected String product_id; + protected String stp; //optional: values are dc, co , cn , cb + protected String funds; public NewOrderSingle() { } diff --git a/model/src/main/java/com/coinbase/exchange/model/PaymentRequest.java b/model/src/main/java/com/coinbase/exchange/model/PaymentRequest.java index 33da49f5..83847b39 100644 --- a/model/src/main/java/com/coinbase/exchange/model/PaymentRequest.java +++ b/model/src/main/java/com/coinbase/exchange/model/PaymentRequest.java @@ -20,4 +20,13 @@ public String getPayment_method_id() { public void setPayment_method_id(String payment_method_id) { this.payment_method_id = payment_method_id; } + + @Override + public String toString() { + return "PaymentRequest{" + + "amount=" + amount + + ", currency='" + currency + '\'' + + ", payment_method_id='" + payment_method_id + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/PaymentResponse.java b/model/src/main/java/com/coinbase/exchange/model/PaymentResponse.java index 317057dd..2b8bbc5b 100644 --- a/model/src/main/java/com/coinbase/exchange/model/PaymentResponse.java +++ b/model/src/main/java/com/coinbase/exchange/model/PaymentResponse.java @@ -52,4 +52,14 @@ public String getPayout_at() { public void setPayout_at(String payout_at) { this.payout_at = payout_at; } + + @Override + public String toString() { + return "PaymentResponse{" + + "id='" + id + '\'' + + ", amount=" + amount + + ", currency='" + currency + '\'' + + ", payout_at='" + payout_at + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/Product.java b/model/src/main/java/com/coinbase/exchange/model/Product.java index 81fcd1f2..2f4e16d6 100644 --- a/model/src/main/java/com/coinbase/exchange/model/Product.java +++ b/model/src/main/java/com/coinbase/exchange/model/Product.java @@ -182,4 +182,27 @@ public String getType() { public void setType(String type) { this.type = type; } + + @Override + public String toString() { + return "Product{" + + "id='" + id + '\'' + + ", base_currency='" + base_currency + '\'' + + ", quote_currency='" + quote_currency + '\'' + + ", base_min_size=" + base_min_size + + ", base_max_size=" + base_max_size + + ", quote_increment=" + quote_increment + + ", base_increment=" + base_increment + + ", display_name='" + display_name + '\'' + + ", status='" + status + '\'' + + ", margin_enabled=" + margin_enabled + + ", status_message='" + status_message + '\'' + + ", min_market_funds=" + min_market_funds + + ", max_market_funds=" + max_market_funds + + ", post_only=" + post_only + + ", limit_only=" + limit_only + + ", cancel_only=" + cancel_only + + ", type='" + type + '\'' + + '}'; + } } diff --git a/model/src/main/java/com/coinbase/exchange/model/ProductOrderBook.java b/model/src/main/java/com/coinbase/exchange/model/ProductOrderBook.java index d3eb524e..7b826acf 100644 --- a/model/src/main/java/com/coinbase/exchange/model/ProductOrderBook.java +++ b/model/src/main/java/com/coinbase/exchange/model/ProductOrderBook.java @@ -34,4 +34,13 @@ public Integer getSequence() { public void setSequence(Integer sequence) { this.sequence = sequence; } + + @Override + public String toString() { + return "ProductOrderBook{" + + "sequence=" + sequence + + ", bids=" + bids + + ", asks=" + asks + + '}'; + } } diff --git a/security/build.gradle b/security/build.gradle index 7434b167..4db7f46e 100644 --- a/security/build.gradle +++ b/security/build.gradle @@ -1,14 +1,3 @@ -plugins { - id 'java' -} - -group 'com.coinbase.exchange' -version '0.11.0' - -repositories { - mavenCentral() -} - dependencies { - testCompile group: 'junit', name: 'junit', version: '4.12' + testImplementation 'junit:junit' } diff --git a/settings.gradle b/settings.gradle index e541e8ac..d00f4bd5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,7 @@ rootProject.name = 'coinbase-pro-java' include 'api' -include 'security' -include 'websocketfeed' include 'model' include 'security' +include 'websocketfeed' diff --git a/websocketfeed/build.gradle b/websocketfeed/build.gradle index af853bd1..d608ffd9 100644 --- a/websocketfeed/build.gradle +++ b/websocketfeed/build.gradle @@ -1,6 +1,6 @@ dependencies { - compile project(':model') - compile project(':security') + implementation project(':model') + implementation project(':security') implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.fasterxml.jackson.core:jackson-core' implementation 'com.fasterxml.jackson.core:jackson-databind'