From 0fb35a217951ff19366132b2e8d9796cc52f4dcd Mon Sep 17 00:00:00 2001 From: Raphael Vullriede Date: Mon, 24 Jun 2024 09:23:45 +0200 Subject: [PATCH] feat: add common classes for OHLC streaming --- ...uto-merge.yml => dependabot-auto-approve.yml} | 2 +- .github/workflows/maven-build.yml | 14 ++++++-------- .github/workflows/maven-publish-release.yml | 8 ++++---- .../java/net/osslabz/crypto/CurrencyPair.java | 15 +++++++++++++++ src/main/java/net/osslabz/crypto/Exchange.java | 16 ++++++++++++++++ src/main/java/net/osslabz/crypto/Ohlc.java | 13 +++---------- src/main/java/net/osslabz/crypto/OhlcAsset.java | 2 +- .../java/net/osslabz/crypto/TradingAsset.java | 16 ++++++++++++++++ 8 files changed, 62 insertions(+), 24 deletions(-) rename .github/workflows/{dependabot-auto-merge.yml => dependabot-auto-approve.yml} (94%) create mode 100644 src/main/java/net/osslabz/crypto/Exchange.java create mode 100644 src/main/java/net/osslabz/crypto/TradingAsset.java diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-approve.yml similarity index 94% rename from .github/workflows/dependabot-auto-merge.yml rename to .github/workflows/dependabot-auto-approve.yml index 00d9d5a..089620b 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-approve.yml @@ -1,4 +1,4 @@ -name: Dependabot auto-approve +name: dependabot-auto-approve on: pull_request permissions: diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml index 34f4391..9ed29de 100644 --- a/.github/workflows/maven-build.yml +++ b/.github/workflows/maven-build.yml @@ -1,6 +1,4 @@ -# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven -name: Java CI with Maven +name: maven-build on: push: @@ -12,12 +10,12 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - java-version: 17 - distribution: 'temurin' - cache: maven + java-version: 21 + distribution: 'temurin' + cache: maven - name: Build with Maven run: mvn --batch-mode --update-snapshots package \ No newline at end of file diff --git a/.github/workflows/maven-publish-release.yml b/.github/workflows/maven-publish-release.yml index c9fe461..842c0b5 100644 --- a/.github/workflows/maven-publish-release.yml +++ b/.github/workflows/maven-publish-release.yml @@ -1,4 +1,4 @@ -name: Publish release package to the Maven Central Repository +name: maven-publish-release on: release: types: [ created ] @@ -13,11 +13,11 @@ jobs: cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import # Verify gpg secret key gpg --list-secret-keys --keyid-format LONG - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' cache: maven server-id: ossrh diff --git a/src/main/java/net/osslabz/crypto/CurrencyPair.java b/src/main/java/net/osslabz/crypto/CurrencyPair.java index 22b4640..dcfa484 100644 --- a/src/main/java/net/osslabz/crypto/CurrencyPair.java +++ b/src/main/java/net/osslabz/crypto/CurrencyPair.java @@ -1,7 +1,22 @@ package net.osslabz.crypto; +import java.util.Objects; + +/** + * Identifies a currency pair. + * + * @param baseCurrencyCode + * @param counterCurrencyCode + */ public record CurrencyPair(String baseCurrencyCode, String counterCurrencyCode) { + public CurrencyPair { + Objects.requireNonNull(baseCurrencyCode, "baseCurrencyCode cannot be null"); + Objects.requireNonNull(counterCurrencyCode, "counterCurrencyCode cannot be null"); + } + public String getLabel() { + return "%s-%s".formatted(this.baseCurrencyCode, this.counterCurrencyCode); + } } \ No newline at end of file diff --git a/src/main/java/net/osslabz/crypto/Exchange.java b/src/main/java/net/osslabz/crypto/Exchange.java new file mode 100644 index 0000000..4b9f23f --- /dev/null +++ b/src/main/java/net/osslabz/crypto/Exchange.java @@ -0,0 +1,16 @@ +package net.osslabz.crypto; + +public enum Exchange { + BINANCE, + + COINBASE, + + KUCOIN, + + KRAKEN, + + MEXC, + + LATOKEN + +} \ No newline at end of file diff --git a/src/main/java/net/osslabz/crypto/Ohlc.java b/src/main/java/net/osslabz/crypto/Ohlc.java index 812f5d5..2175702 100644 --- a/src/main/java/net/osslabz/crypto/Ohlc.java +++ b/src/main/java/net/osslabz/crypto/Ohlc.java @@ -11,16 +11,15 @@ @Data -@SuperBuilder @NoArgsConstructor @AllArgsConstructor +@SuperBuilder(toBuilder = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true) public class Ohlc { + @EqualsAndHashCode.Include private OhlcAsset asset; - private ZonedDateTime updateTime; - @EqualsAndHashCode.Include private ZonedDateTime openTime; @@ -40,11 +39,5 @@ public class Ohlc { private Long numTrades; - public CurrencyPair getCurrencyPair() { - return this.asset.currencyPair(); - } - - public Interval getInterval() { - return this.asset.interval(); - } + private ZonedDateTime updateTime; } \ No newline at end of file diff --git a/src/main/java/net/osslabz/crypto/OhlcAsset.java b/src/main/java/net/osslabz/crypto/OhlcAsset.java index d4c71c1..29f8d63 100644 --- a/src/main/java/net/osslabz/crypto/OhlcAsset.java +++ b/src/main/java/net/osslabz/crypto/OhlcAsset.java @@ -1,4 +1,4 @@ package net.osslabz.crypto; -public record OhlcAsset(CurrencyPair currencyPair, Interval interval) { +public record OhlcAsset(TradingAsset tradingAsset, Interval interval) { } \ No newline at end of file diff --git a/src/main/java/net/osslabz/crypto/TradingAsset.java b/src/main/java/net/osslabz/crypto/TradingAsset.java new file mode 100644 index 0000000..da65a41 --- /dev/null +++ b/src/main/java/net/osslabz/crypto/TradingAsset.java @@ -0,0 +1,16 @@ +package net.osslabz.crypto; + +import java.util.Objects; + +/** + * Identifies a trading asset (a currency pair on a specific exchange). + * + * @param exchange + * @param currencyPair + */ +public record TradingAsset(Exchange exchange, CurrencyPair currencyPair) { + public TradingAsset { + Objects.requireNonNull(exchange, "exchange cannot be null"); + Objects.requireNonNull(currencyPair, "currencyPair cannot be null"); + } +} \ No newline at end of file