Skip to content

Commit

Permalink
feat: coineal asset balance
Browse files Browse the repository at this point in the history
  • Loading branch information
traeper committed Jul 2, 2019
1 parent 345d4a4 commit f586058
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,25 @@

package com.njkim.reactivecrypto.coineal.http

import com.njkim.reactivecrypto.coineal.http.raw.CoinealRawAccountOperation
import com.njkim.reactivecrypto.core.common.model.account.Balance
import com.njkim.reactivecrypto.core.http.AccountOperation
import reactor.core.publisher.Flux

class CoinealAccountOperator(
accessKey: String,
secretKey: String
secretKey: String,
private val coinealRawAccountOperation: CoinealRawAccountOperation
) : AccountOperation(accessKey, secretKey) {
override fun balance(): Flux<Balance> {
TODO("not implemented")
return coinealRawAccountOperation
.balance()
.map {
Balance(
it.currency,
it.normal,
it.locked
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ class CoinealPrivateHttpClient(
private val coinealRawPrivateHttpClient: CoinealRawPrivateHttpClient
) : PrivateHttpClient(accessKey, secretKey) {
override fun account(): AccountOperation {
TODO("not implemented")
return CoinealAccountOperator(
accessKey,
secretKey,
coinealRawPrivateHttpClient.account()
)
}

override fun order(): OrderOperation {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.njkim.reactivecrypto.coineal.http.raw

import com.njkim.reactivecrypto.coineal.model.CoinealApiResponse
import com.njkim.reactivecrypto.coineal.model.CoinealBalance
import com.njkim.reactivecrypto.coineal.model.CoinealBalanceWrapper
import com.njkim.reactivecrypto.core.common.util.toEpochMilli
import com.njkim.reactivecrypto.core.common.util.toMultiValueMap
import org.springframework.web.reactive.function.client.WebClient
import org.springframework.web.reactive.function.client.bodyToMono
import reactor.core.publisher.Flux
import java.time.ZonedDateTime

/**
Created by jay on 02/07/2019
**/
class CoinealRawAccountOperation(
private val webClient: WebClient,
private val accessKey: String,
private val secretKey: String
) {
fun balance(): Flux<CoinealBalance> {
var params = mapOf(
"api_key" to accessKey,
"time" to ZonedDateTime.now().toEpochMilli()
)
params = sign(params, secretKey)
return webClient.get()
.uri {
it.path("/open/api/user/account")
.queryParams(params.toMultiValueMap())
.build()
}
.retrieve()
.bodyToMono<CoinealApiResponse<CoinealBalanceWrapper>>()
.flatMapIterable {
it.data.coinList
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package com.njkim.reactivecrypto.coineal.http.raw

import com.njkim.reactivecrypto.core.http.AccountOperation
import org.springframework.web.reactive.function.client.WebClient

class CoinealRawPrivateHttpClient(
Expand All @@ -28,7 +27,7 @@ class CoinealRawPrivateHttpClient(
return CoinealRawOrderOperation(webClient, accessKey, secretKey)
}

fun account(): AccountOperation {
TODO("not implemented")
fun account(): CoinealRawAccountOperation {
return CoinealRawAccountOperation(webClient, accessKey, secretKey)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.njkim.reactivecrypto.coineal.model

/**
Created by jay on 02/07/2019
**/
import com.fasterxml.jackson.annotation.JsonProperty
import com.njkim.reactivecrypto.core.common.model.currency.Currency
import java.math.BigDecimal

class CoinealBalance(
@get:JsonProperty("coin")
val currency: Currency,

@get:JsonProperty("normal")
val normal: BigDecimal,

@get:JsonProperty("locked")
val locked: BigDecimal,

@get:JsonProperty("btcValuatin")
val btcValuatIn: BigDecimal
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.njkim.reactivecrypto.coineal.model

import com.fasterxml.jackson.annotation.JsonProperty
import java.math.BigDecimal

/**
Created by jay on 02/07/2019
**/
data class CoinealBalanceWrapper(
@JsonProperty("total_asset")
val totalAsset: BigDecimal,
@JsonProperty("coin_list")
private val nullableCoinList: List<CoinealBalance>?
) {
val coinList: List<CoinealBalance>
get() {
return nullableCoinList ?: emptyList()
}
}

0 comments on commit f586058

Please sign in to comment.