Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package co.nilin.opex.api.core.inout
data class ChainInfo(
val name: String,
val addressTypes: String?,
val externalChainScannerUrl: String? = null,
val addressRegex: String? = null
val addressRegex: String? = null,
val transactionScannerUrl: String? = null,
val addressScannerUrl: String? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ class AdminController(
ChainResponse(
c.name,
c.addressTypes.map { it.type }.getOrNull(0),
c.externalChinScannerUrl,
c.addressTypes.map { it.addressRegex }.getOrNull(0)
c.addressTypes.map { it.addressRegex }.getOrNull(0),
c.transactionScannerUrl,
c.addressScannerUrl,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import co.nilin.opex.bcgateway.core.model.FetchGateways
import co.nilin.opex.bcgateway.core.model.WithdrawData
import co.nilin.opex.bcgateway.core.spi.ChainLoader
import co.nilin.opex.bcgateway.core.spi.CryptoCurrencyHandlerV2
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.reactor.ReactorContext
import org.springframework.web.bind.annotation.*

@RestController
Expand Down Expand Up @@ -78,9 +76,10 @@ class CryptoCurrencyController(
ChainResponse(
c.name,
c.addressTypes.map { it.type }.getOrNull(0),
c.externalChinScannerUrl,
c.addressTypes.map { it.addressRegex }.getOrNull(0)
)
c.addressTypes.map { it.addressRegex }.getOrNull(0),
c.transactionScannerUrl,
c.addressScannerUrl,
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package co.nilin.opex.bcgateway.app.dto
data class AddChainRequest(
val name: String?,
val addressType: String?,
val scannerEndpoint: String?,
val scheduleDelaySeconds: Int,
val scheduleErrorDelaySeconds: Int,
val transactionScannerUrl: String? = null,
val addressScannerUrl: String? = null
) {
fun isValid(): Boolean {
return !name.isNullOrEmpty() && !addressType.isNullOrEmpty() && scheduleDelaySeconds > 0 && scheduleErrorDelaySeconds > 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package co.nilin.opex.bcgateway.app.dto
data class ChainResponse(
val name: String,
val addressTypes: String?,
val externalChainScannerUrl: String? = null,
val addressRegex: String? = null
val addressRegex: String? = null,
val transactionScannerUrl: String? = null,
val addressScannerUrl: String?= null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class AdminService(

@Transactional
suspend fun addChain(body: AddChainRequest) {
chainLoader.addChain(body.name!!, body.addressType!!)
chainLoader.addChain(body.name!!, body.addressType!!, body.transactionScannerUrl, body.addressScannerUrl)
}

suspend fun addAddressType(name: String, addressRegex: String, memoRegex: String?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ package co.nilin.opex.bcgateway.core.model
data class Chain(
val name: String,
val addressTypes: List<AddressType>,
val externalChinScannerUrl: String? = null)
val transactionScannerUrl: String? = null,
val addressScannerUrl: String? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ import co.nilin.opex.bcgateway.core.model.Chain

interface ChainLoader {

suspend fun addChain(name: String, addressType: String): Chain
suspend fun addChain(
name: String,
addressType: String,
transactionScannerUrl: String?,
addressScannerUrl: String?
): Chain

suspend fun fetchAllChains(): List<Chain>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@ import reactor.core.publisher.Mono
@Repository
interface ChainRepository : ReactiveCrudRepository<ChainModel, String> {

@Query("insert into chains values (:name) on conflict do nothing")
fun insert(name: String): Mono<Void>
@Query("insert into chains values (:name,:transaction_scanner_url,:address_scanner_url) on conflict do nothing")
fun insert(
name: String,
transactionScannerUrl: String?,
addressScannerUrl: String?
): Mono<Void>

fun findByName(name: String): Mono<ChainModel>?

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,23 @@ class ChainHandler(
private val chainAddressRepository: ChainAddressTypeRepository
) : ChainLoader {

override suspend fun addChain(name: String, addressType: String): Chain {
override suspend fun addChain(
name: String,
addressType: String,
transactionScannerUrl: String?,
addressScannerUrl: String?
): Chain {
val chain = chainRepository.findByName(name)?.awaitFirstOrNull()
if (chain != null)
throw OpexError.BadRequest.exception()

val type = addressTypeRepository.findByType(addressType).awaitFirstOrNull()
?: throw OpexError.InvalidAddressType.exception()

chainRepository.insert(name).awaitFirstOrNull()
chainRepository.insert(name, transactionScannerUrl, addressScannerUrl).awaitFirstOrNull()
val model = chainRepository.findByName(name)?.awaitFirstOrElse { throw OpexError.BadRequest.exception() }
chainAddressRepository.save(ChainAddressTypeModel(null, model!!.name, type.id!!)).awaitFirstOrNull()
return Chain(model.name, emptyList())
return Chain(model.name, emptyList(), transactionScannerUrl, addressScannerUrl)
}

override suspend fun fetchAllChains(): List<Chain> {
Expand All @@ -44,15 +49,15 @@ class ChainHandler(
.map { AddressType(it.id!!, it.type, it.addressRegex, it.memoRegex) }
.toList()

Chain(c.name, addressTypes, c.externalChainScannerUrl)
Chain(c.name, addressTypes, c.transactionScannerUrl, c.addressScannerUrl)
Comment thread
AmirRajabii marked this conversation as resolved.
}
}

override suspend fun fetchChainInfo(chain: String): Chain {
val chainDao = chainRepository.findByName(chain)?.awaitFirstOrElse { throw OpexError.ChainNotFound.exception() }
val addressTypes = chainRepository.findAddressTypesByName(chain)
.map { AddressType(it.id!!, it.type, it.addressRegex, it.memoRegex) }.toList()
return Chain(chainDao!!.name, addressTypes)
return Chain(chainDao!!.name, addressTypes, chainDao.transactionScannerUrl, chainDao.addressScannerUrl)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ import org.springframework.data.annotation.Id
import org.springframework.data.relational.core.mapping.Table

@Table("chains")
data class ChainModel(@Id val name: String, val externalChainScannerUrl: String?)
data class ChainModel(
@Id val name: String,
val transactionScannerUrl: String?,
val addressScannerUrl: String?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Alter table chains drop column external_chain_scanner_url;

Alter table chains add column transaction_scanner_url VARCHAR(150);
Alter table chains add column address_scanner_url VARCHAR(150);
Comment thread
AmirRajabii marked this conversation as resolved.
Loading