From b2115cda9d86fb987000808d6c673c0e29b8b923 Mon Sep 17 00:00:00 2001 From: martinkyov Date: Mon, 29 Jul 2024 10:22:45 +0200 Subject: [PATCH 01/13] feature/ETD-1340-container-update-simplecoin-csv --- .../exchange/simpleCoin/SimpleCoinBeanV2.java | 134 ------------------ 1 file changed, 134 deletions(-) delete mode 100644 plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simpleCoin/SimpleCoinBeanV2.java diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simpleCoin/SimpleCoinBeanV2.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simpleCoin/SimpleCoinBeanV2.java deleted file mode 100644 index 1265ce73..00000000 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simpleCoin/SimpleCoinBeanV2.java +++ /dev/null @@ -1,134 +0,0 @@ -package io.everytrade.server.plugin.impl.everytrade.parser.exchange.simplecoin; - -import com.univocity.parsers.annotations.Format; -import com.univocity.parsers.annotations.Parsed; -import io.everytrade.server.model.Currency; -import io.everytrade.server.model.TransactionType; -import io.everytrade.server.plugin.impl.everytrade.parser.exception.DataIgnoredException; -import io.everytrade.server.plugin.impl.everytrade.parser.exchange.bean.BaseClusterData; -import io.everytrade.server.plugin.impl.everytrade.parser.exchange.kuCoin.BaseTransactionMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.math.BigDecimal; -import java.time.Instant; -import java.util.Date; - -@EqualsAndHashCode(callSuper = true) -@ToString -@Data -public class SimplecoinBeanV2 extends BaseTransactionMapper implements Cloneable { - - private static final String DELIVERED = "delivered"; - - private Instant dateDone; - private String orderId; - private Currency currencyFrom; - private Currency currencyTo; - private BigDecimal amountFrom; - private BigDecimal amountTo; - private String finalStatus; - private Instant fromTxDate; - private Instant toTxDate; - private String fromBankAccountNumber; - private String fromTxAddress; - - private Currency baseCurrency; - private Currency quoteCurrency; - private BigDecimal baseAmount; - private BigDecimal quoteAmount; - private TransactionType transactionType; - private boolean unsupportedRow; - - @Parsed(field = "Date Done") - @Format(formats = {"yyyy-MM-dd HH:mm:ss"}, options = {"locale=EN", "timezone=UTC"}) - public void setDateDone(Date dateDone) { - this.dateDone = dateDone.toInstant(); - } - - @Parsed(field = "Order Id") - public void setOrderId(String orderId) { - this.orderId = orderId; - } - - @Parsed(field = "Currency From") - public void setCurrencyFrom(String currencyFrom) { - this.currencyFrom = Currency.valueOf(currencyFrom); - } - - @Parsed(field = "Currency To") - public void setCurrencyTo(String currencyTo) { - this.currencyTo = Currency.valueOf(currencyTo); - } - - @Parsed(field = "Amount From") - public void setAmountFrom(BigDecimal amountFrom) { - this.amountFrom = amountFrom; - } - - @Parsed(field = "Amount To") - public void setAmountTo(BigDecimal amountTo) { - this.amountTo = amountTo; - } - - @Parsed(field = "Final Status") - public void setFinalStatus(String finalStatus) { - if (!DELIVERED.equalsIgnoreCase(finalStatus)) { - unsupportedRow = true; - } - this.finalStatus = finalStatus; - } - - @Parsed(field = "From Tx Date") - @Format(formats = {"yyyy-MM-dd HH:mm:ss"}, options = {"locale=EN", "timezone=UTC"}) - public void setFromTxDate(Date fromTxDate) { - if (fromTxDate != null) { - this.fromTxDate = fromTxDate.toInstant(); - } - } - - @Parsed(field = "To Tx Date") - @Format(formats = {"yyyy-MM-dd HH:mm:ss"}, options = {"locale=EN", "timezone=UTC"}) - public void setToTxDate(Date toTxDate) { - if (toTxDate != null) { - this.toTxDate = toTxDate.toInstant(); - } - } - - @Parsed(field = "From Bank Account Number") - public void setFromBankAccountNumber(String fromBankAccountNumber) { - this.fromBankAccountNumber = fromBankAccountNumber; - } - - @Parsed(field = "From Tx Address") - public void setFromTxAddress(String fromTxAddress) { - this.fromTxAddress = fromTxAddress; - } - - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - protected TransactionType findTransactionType() { - return null; - } - - @Override - protected BaseClusterData mapData() { - if (unsupportedRow) { - throw new DataIgnoredException("Transaction final status is cancelled."); - } - - return BaseClusterData.builder() - .transactionType(transactionType) - .executed(dateDone) - .base(baseCurrency) - .quote(quoteCurrency) - .volume(baseAmount) - .unitPrice(evalUnitPrice(quoteAmount, baseAmount)) - .address(fromTxAddress != null ? fromTxAddress : fromBankAccountNumber) - .build(); - } -} From e499c459ab4ee7134c492128b8a6d9cdb7b5c238 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Fri, 30 Aug 2024 12:40:20 +0200 Subject: [PATCH 02/13] feature/ETD-1340-container-update-simplecoin-csv --- .../exchange/simplecoin/SimplecoinBeanV2.java | 18 ------------------ .../simplecoin/SimplecoinSortedGroup.java | 8 ++------ .../exchange/bean/SimplecoinBeanV2Test.java | 8 ++++---- 3 files changed, 6 insertions(+), 28 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinBeanV2.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinBeanV2.java index 1265ce73..09b029ac 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinBeanV2.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinBeanV2.java @@ -29,8 +29,6 @@ public class SimplecoinBeanV2 extends BaseTransactionMapper implements Cloneable private BigDecimal amountFrom; private BigDecimal amountTo; private String finalStatus; - private Instant fromTxDate; - private Instant toTxDate; private String fromBankAccountNumber; private String fromTxAddress; @@ -80,22 +78,6 @@ public void setFinalStatus(String finalStatus) { this.finalStatus = finalStatus; } - @Parsed(field = "From Tx Date") - @Format(formats = {"yyyy-MM-dd HH:mm:ss"}, options = {"locale=EN", "timezone=UTC"}) - public void setFromTxDate(Date fromTxDate) { - if (fromTxDate != null) { - this.fromTxDate = fromTxDate.toInstant(); - } - } - - @Parsed(field = "To Tx Date") - @Format(formats = {"yyyy-MM-dd HH:mm:ss"}, options = {"locale=EN", "timezone=UTC"}) - public void setToTxDate(Date toTxDate) { - if (toTxDate != null) { - this.toTxDate = toTxDate.toInstant(); - } - } - @Parsed(field = "From Bank Account Number") public void setFromBankAccountNumber(String fromBankAccountNumber) { this.fromBankAccountNumber = fromBankAccountNumber; diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinSortedGroup.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinSortedGroup.java index 7afd3d9a..bbf95dc7 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinSortedGroup.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/simplecoin/SimplecoinSortedGroup.java @@ -37,18 +37,14 @@ private static List createWithdrawDepositBean(SimplecoinBeanV2 try { SimplecoinBeanV2 deposit = (SimplecoinBeanV2) row.clone(); deposit.setTransactionType(DEPOSIT); - deposit.setDateDone(row.getFromTxDate() == null - ? Date.from(row.getDateDone().minusSeconds(1)) - : Date.from(row.getFromTxDate())); + deposit.setDateDone(Date.from(row.getDateDone().minusSeconds(1))); deposit.setBaseAmount(row.getAmountFrom().abs()); deposit.setBaseCurrency(row.getCurrencyFrom()); deposit.setQuoteCurrency(row.getCurrencyFrom()); SimplecoinBeanV2 withdraw = (SimplecoinBeanV2) row.clone(); withdraw.setTransactionType(WITHDRAWAL); - withdraw.setDateDone(row.getToTxDate() == null - ? Date.from(row.getDateDone().plusSeconds(1)) - : Date.from(row.getToTxDate())); + withdraw.setDateDone(Date.from(row.getDateDone().plusSeconds(1))); withdraw.setBaseAmount(row.getAmountTo().abs()); withdraw.setBaseCurrency(row.getCurrencyTo()); withdraw.setQuoteCurrency(row.getCurrencyTo()); diff --git a/plugin-base/src/test/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/bean/SimplecoinBeanV2Test.java b/plugin-base/src/test/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/bean/SimplecoinBeanV2Test.java index 09a238eb..b118d8bc 100644 --- a/plugin-base/src/test/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/bean/SimplecoinBeanV2Test.java +++ b/plugin-base/src/test/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/bean/SimplecoinBeanV2Test.java @@ -24,7 +24,7 @@ public class SimplecoinBeanV2Test { @Test - void testBuy() { + void testBuyDepositWithdrawal() { final String row = "2024-04-19 21:03:34,190897,fakemail@email.com,CZK,BTC,10000.00000000,0.00626310,394.13,delivered," + "2024-04-23 12:31:09,,1980538010/3030,,,,2024-04-23 10:17:56,,bc1qk6zgk73295rfyw55qs3dw2r796xmv0dqzxh9m8," + "4eb28bceaaef3c76a1fc96ddc7822f43756bb2805e78dbb3cd101edf1ac029b5,840497\n"; @@ -49,7 +49,7 @@ void testBuy() { final TransactionCluster expected1 = new TransactionCluster( new ImportedTransactionBean( null, - Instant.parse("2024-04-23T10:17:56Z"), + Instant.parse("2024-04-23T12:31:10Z"), BTC, BTC, WITHDRAWAL, @@ -81,7 +81,7 @@ void testBuy() { } @Test - void testSell() { + void testSellDepositWithdrawal() { final String row = "2021-12-22 21:08:46,136485,fakemail@email.com,ETH,CZK,0.11990000,10475.50000000,423.66,delivered,2021-12-22 " + "21:38:02,2021-12-22 20:17:25,,0x1A9D82eED6666bAc205FdF296349e1C1Ffc49B0D," + "0xa58ef61ad9437d10afb675ad2c0e3a948b51f03a4403f8f49fecd679cd60c92c,13857092,,1980538010/3030,,,\n"; @@ -91,7 +91,7 @@ void testSell() { final TransactionCluster expected = new TransactionCluster( new ImportedTransactionBean( null, - Instant.parse("2021-12-22T20:17:25Z"), + Instant.parse("2021-12-22T21:38:01Z"), ETH, ETH, DEPOSIT, From 7f62f27c9cac0402ae9d404691dc8eaf3608b61a Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Fri, 6 Sep 2024 15:45:32 +0200 Subject: [PATCH 03/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../server/plugin/impl/everytrade/CoinmateConnector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java index 31a5076e..2cd3fa97 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java @@ -43,7 +43,7 @@ public class CoinmateConnector implements IConnector { // MAX 100 request per minute per user, https://coinmate.docs.apiary.io/#reference/request-limits private static final int MAX_REQUEST_COUNT = 7; // https://coinmate.docs.apiary.io/#reference/transaction-history/get-transaction-history - private static final int TX_PER_REQUEST = 990; + private static final int TX_PER_REQUEST = 1000; private static final Logger LOG = LoggerFactory.getLogger(CoinmateConnector.class); private static final ConnectorParameterDescriptor PARAMETER_API_USERNAME = From 541cf86293f61b3417644fd08b6b278ca226cac1 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Mon, 16 Sep 2024 09:42:03 +0200 Subject: [PATCH 04/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../server/plugin/impl/everytrade/CoinmateConnector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java index 2cd3fa97..15faf09b 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java @@ -43,7 +43,7 @@ public class CoinmateConnector implements IConnector { // MAX 100 request per minute per user, https://coinmate.docs.apiary.io/#reference/request-limits private static final int MAX_REQUEST_COUNT = 7; // https://coinmate.docs.apiary.io/#reference/transaction-history/get-transaction-history - private static final int TX_PER_REQUEST = 1000; + private static final int TX_PER_REQUEST = 800; private static final Logger LOG = LoggerFactory.getLogger(CoinmateConnector.class); private static final ConnectorParameterDescriptor PARAMETER_API_USERNAME = From 64ce2f488aa9e89f1669b015856e1e25fee64018 Mon Sep 17 00:00:00 2001 From: martinkyov Date: Mon, 9 Sep 2024 09:27:33 +0200 Subject: [PATCH 05/13] new version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 745a7833..79a43366 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.2.148 +projectVersion=5.2.149 pf4jVersion=3.7.0 xchangeVersion=5.1.0 requiredEverytradeVersion=>=20210427 From 2a31234025fadfec3f31979831f12709267f09c9 Mon Sep 17 00:00:00 2001 From: Martin <89248739+martinkyov@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:28:38 +0200 Subject: [PATCH 06/13] Feature/etd 1418 rates add exchange rate for spe (#454) * feature/ETD-1418-rates-add-exchange-rate-for-spe --- gradle.properties | 2 +- .../src/main/java/io/everytrade/server/model/Currency.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 79a43366..6d803172 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.2.149 +projectVersion=5.2.150 pf4jVersion=3.7.0 xchangeVersion=5.1.0 requiredEverytradeVersion=>=20210427 diff --git a/plugin-api/src/main/java/io/everytrade/server/model/Currency.java b/plugin-api/src/main/java/io/everytrade/server/model/Currency.java index a9e44050..59753246 100644 --- a/plugin-api/src/main/java/io/everytrade/server/model/Currency.java +++ b/plugin-api/src/main/java/io/everytrade/server/model/Currency.java @@ -899,7 +899,10 @@ public enum Currency { TADPOLE(false, Instant.parse("2023-06-06T00:00:00Z"), "tadpole-tadpole"), DREAM(false, Instant.parse("2024-06-14T00:00:00Z"), "dream-dream-cat"), FAO(false, Instant.parse("2021-08-12T00:00:00Z"), "fao-farmer-and-one-farmer-and-one-token"), - VITALEK(false, Instant.parse("2024-03-12T00:00:00Z"), "vitalek-vitalek-buteren"); + VITALEK(false, Instant.parse("2024-03-12T00:00:00Z"), "vitalek-vitalek-buteren"), + DACAT(false, Instant.parse("2024-01-23T00:00:00Z"), "daCat"), + ONDO(false, Instant.parse("2024-01-21T00:00:00Z"), "Ondo"), + BEBE(false, Instant.parse("2024-02-03T00:00:00Z"), "Baby Bitcoin"); String code; From 40d8224d4dce2495985179aae74a59a520059986 Mon Sep 17 00:00:00 2001 From: Martin <89248739+martinkyov@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:33:58 +0200 Subject: [PATCH 07/13] Feature/etd 1418 rates add exchange rate for spe (#455) * feature/ETD-1418-rates-add-exchange-rate-for-spe --- .../src/main/java/io/everytrade/server/model/Currency.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin-api/src/main/java/io/everytrade/server/model/Currency.java b/plugin-api/src/main/java/io/everytrade/server/model/Currency.java index 59753246..1ace8a14 100644 --- a/plugin-api/src/main/java/io/everytrade/server/model/Currency.java +++ b/plugin-api/src/main/java/io/everytrade/server/model/Currency.java @@ -893,8 +893,8 @@ public enum Currency { PNDC(false, Instant.parse("2023-08-05T00:00:00Z"), "pndc-pond-coin"), PIKA(false, Instant.parse("2023-05-18T00:00:00Z"), "pika-pikachueth"), RAIL(false, Instant.parse("2021-09-09T00:00:00Z"), "rail-railgun"), - LOLA(false, Instant.parse("2024-02-29T00:00:00Z"), "lola-lola"), - FLEX(false, Instant.parse("2024-05-10T00:00:00Z"), "flex-flex"), + LOLA(false, Instant.parse("2024-02-04T00:00:00Z"), "lola-lola"), + FLEX(false, Instant.parse("2024-02-06T00:00:00Z"), "flex-flex"), GROK(false, Instant.parse("2023-11-13T00:00:00Z"), "grok-grok-eth"), TADPOLE(false, Instant.parse("2023-06-06T00:00:00Z"), "tadpole-tadpole"), DREAM(false, Instant.parse("2024-06-14T00:00:00Z"), "dream-dream-cat"), From 6aa8fc72733ea42d02dcaeebe569e4b33d3add85 Mon Sep 17 00:00:00 2001 From: martinkyov Date: Fri, 13 Sep 2024 15:36:04 +0200 Subject: [PATCH 08/13] new version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6d803172..4575c28b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.2.150 +projectVersion=5.2.151 pf4jVersion=3.7.0 xchangeVersion=5.1.0 requiredEverytradeVersion=>=20210427 From 07c3a0f3a6255ad03d423c3f25d1a4da4ed5f888 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Mon, 23 Sep 2024 13:36:43 +0200 Subject: [PATCH 09/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../server/parser/exchange/XChangeApiTransaction.java | 2 +- .../server/plugin/impl/everytrade/CoinmateConnector.java | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/parser/exchange/XChangeApiTransaction.java b/plugin-base/src/main/java/io/everytrade/server/parser/exchange/XChangeApiTransaction.java index f4f3cd62..95020410 100644 --- a/plugin-base/src/main/java/io/everytrade/server/parser/exchange/XChangeApiTransaction.java +++ b/plugin-base/src/main/java/io/everytrade/server/parser/exchange/XChangeApiTransaction.java @@ -176,7 +176,7 @@ public static XChangeApiTransaction fromCoinMateTransactions(CoinmateTransaction CoinMateDataUtil.adaptTransactionStatus(transaction.getStatus()); var currency = Currency.fromCode(transaction.getAmountCurrency()); String priceCurrency = transaction.getPriceCurrency(); - Currency quote = priceCurrency != null ? Currency.fromCode(priceCurrency) : null; + Currency quote = priceCurrency != null ? Currency.fromCode(priceCurrency) : currency; String feeCurrency = transaction.getFeeCurrency(); Currency fee = feeCurrency != null ? Currency.fromCode(feeCurrency) : null; return XChangeApiTransaction.builder() diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java index 15faf09b..307a9d58 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java @@ -41,9 +41,8 @@ public class CoinmateConnector implements IConnector { private static final String SORT_DESC = "DESC"; private static final long DELAY = 24 * 60 * 60 * 1000L; // MAX 100 request per minute per user, https://coinmate.docs.apiary.io/#reference/request-limits - private static final int MAX_REQUEST_COUNT = 7; // https://coinmate.docs.apiary.io/#reference/transaction-history/get-transaction-history - private static final int TX_PER_REQUEST = 800; + private static final int TX_PER_REQUEST = 799; private static final Logger LOG = LoggerFactory.getLogger(CoinmateConnector.class); private static final ConnectorParameterDescriptor PARAMETER_API_USERNAME = @@ -122,8 +121,7 @@ private List downloadTransactions(DownloadState long txFrom = state.getTxFrom(); long txTo = state.getTxTo() == 0L ? now : state.getTxTo(); int offset = state.getOffset(); - int sentRequests = 0; - while (sentRequests < MAX_REQUEST_COUNT) { + while (true) { final List userTransactionBlock; try { userTransactionBlock = rawServices.getCoinmateTransactionHistory( @@ -150,7 +148,6 @@ private List downloadTransactions(DownloadState state.offset = offset; allData.addAll(userTransactionBlock); } - ++sentRequests; } return allData; } From 9818e5684098a7d78e63c6d907cb896c4cdf13c4 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Mon, 23 Sep 2024 15:12:58 +0200 Subject: [PATCH 10/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../exchange/BinanceExchangeSpecificParserV4.java | 7 +++++-- .../exchange/binance/v4/BinanceSortedGroupV4.java | 10 +++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java index 621849b8..a9d592d3 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java @@ -311,10 +311,13 @@ private Map> mergeGroupsInTimeWithinTolerance(Map r.setDate((Instant) null)); continue; } List all = currentValues; diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/binance/v4/BinanceSortedGroupV4.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/binance/v4/BinanceSortedGroupV4.java index 1d07b5d7..32ab50f1 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/binance/v4/BinanceSortedGroupV4.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/binance/v4/BinanceSortedGroupV4.java @@ -146,8 +146,12 @@ private void sumAllRows() { private List sumRows(Map> rows) { List result = new ArrayList<>(); - if (rows.size() > 0) { - var time = rows.values().stream().collect(Collectors.toList()).get(0).get(0).getDate(); + if (!rows.isEmpty()) { + var time = rows.values().stream() + .flatMap(List::stream) + .map(BinanceBeanV4::getDate) + .filter(Objects::nonNull) + .findFirst(); for (Map.Entry> entry : rows.entrySet()) { if(!entry.getValue().get(0).getOperationType().isMultiRowType) { entry.getValue().get(0).usedIds.add(entry.getValue().get(0).getRowId()); @@ -166,7 +170,7 @@ private List sumRows(Map> rows) { newBean.setRowId(entry.getValue().get(0).getRowId()); newBean.setOriginalOperation(entry.getValue().get(0).getOriginalOperation()); newBean.usedIds.addAll(ids); - newBean.setDate(time); + newBean.setDate(time.orElse(null)); result.add(newBean); } } From 062bec5c23f59bca0f2d219e11e6d9a1fbafc91a Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Mon, 23 Sep 2024 15:17:41 +0200 Subject: [PATCH 11/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../parser/exchange/BinanceExchangeSpecificParserV4.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java index a9d592d3..fa2c26fc 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/BinanceExchangeSpecificParserV4.java @@ -313,8 +313,8 @@ private Map> mergeGroupsInTimeWithinTolerance(Map r.setDate((Instant) null)); From 6ad3513217b83c86f048f3005168450724ade978 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Tue, 3 Dec 2024 16:47:54 +0100 Subject: [PATCH 12/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../impl/everytrade/CoinmateConnector.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java index bc680a26..45280616 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/CoinmateConnector.java @@ -42,7 +42,7 @@ public class CoinmateConnector implements IConnector { private static final long DELAY = 24 * 60 * 60 * 1000L; // MAX 100 request per minute per user, https://coinmate.docs.apiary.io/#reference/request-limits // https://coinmate.docs.apiary.io/#reference/transaction-history/get-transaction-history - private static final int TX_PER_REQUEST = 799; + private static final int TX_PER_REQUEST = 1000; private static final Logger LOG = LoggerFactory.getLogger(CoinmateConnector.class); private static final int MAX_ITERATIONS = 80; @@ -118,10 +118,8 @@ private List downloadTransactions(DownloadState setTxFromTimestamp(state); List allData = new ArrayList<>(); - long now = Instant.now().toEpochMilli(); long txFrom = state.getTxFrom(); - long txTo = state.getTxTo() == 0L ? now : state.getTxTo(); - int offset = state.getOffset(); + long txTo = state.getTxTo() == 0L ? Instant.now().toEpochMilli() : state.getTxTo(); int iterationCount = 0; @@ -129,31 +127,37 @@ private List downloadTransactions(DownloadState if (iterationCount++ >= MAX_ITERATIONS) { throw new IllegalStateException("Maximum iterations reached. Possible infinite loop detected."); } - final List userTransactionBlock; + + List userTransactionBlock; try { userTransactionBlock = rawServices.getCoinmateTransactionHistory( - offset, TX_PER_REQUEST, SORT_DESC, txFrom, txTo, null).getData(); + 0, TX_PER_REQUEST, SORT_DESC, txFrom, txTo, null).getData(); } catch (IOException e) { throw new IllegalStateException("Download user trade history failed.", e); } + if (userTransactionBlock.isEmpty()) { - state.offset = 0; state.txFrom = txTo; state.txTo = 0L; break; } - if(userTransactionBlock.size() < TX_PER_REQUEST) { - state.offset = 0; + + allData.addAll(userTransactionBlock); + + if (userTransactionBlock.size() < TX_PER_REQUEST) { state.txFrom = txTo; state.txTo = 0L; - allData.addAll(userTransactionBlock); break; - } else { - txTo = now; - offset += TX_PER_REQUEST; - state.txTo = now; - state.offset = offset; - allData.addAll(userTransactionBlock); + } + + txTo = userTransactionBlock.get(userTransactionBlock.size() - 1).getTimestamp() - 1; + state.txTo = txTo; + + try { + Thread.sleep(600); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IllegalStateException("Thread was interrupted during sleep.", e); } } return allData; From c3172f7a48ceaf768acf4791f136bfcbb2aa7007 Mon Sep 17 00:00:00 2001 From: MiroDoan Date: Tue, 3 Dec 2024 16:55:22 +0100 Subject: [PATCH 13/13] bugfix/ETD-1401-connectors-coinmate.api-dont-co- --- .../parser/exchange/KrakenExchangeSpecificParser.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/KrakenExchangeSpecificParser.java b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/KrakenExchangeSpecificParser.java index 116664ba..ac083fa7 100644 --- a/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/KrakenExchangeSpecificParser.java +++ b/plugin-base/src/main/java/io/everytrade/server/plugin/impl/everytrade/parser/exchange/KrakenExchangeSpecificParser.java @@ -61,12 +61,11 @@ public Map> removeGroupsWithUnsupportedRows(Map> result = new HashMap<>(); for (Map.Entry> entry : rowGroups.entrySet()) { var rowsInGroup = entry.getValue(); - var isOneOrMoreUnsupportedRows = - !rowsInGroup.stream().filter(r -> r.isUnsupportedRow() == true).collect(Collectors.toList()).isEmpty(); + var isOneOrMoreUnsupportedRows = rowsInGroup.stream().anyMatch(KrakenBeanV2::isUnsupportedRow); if (!isOneOrMoreUnsupportedRows) { result.put(entry.getKey(), entry.getValue()); } else { - var ids = rowsInGroup.stream().map(r -> r.getRowId()).collect(Collectors.toList()); + var ids = rowsInGroup.stream().map(KrakenBeanV2::getRowId).toList(); var s = BinanceSortedGroupV4.parseIds(ids); setRowsAsUnsupported(rowsInGroup, "One or more rows in group " + "( rows: " + s + ") is unsupported"); }