From ff15d0ae6fe0e7b6dd4ead6572c31cf7bbff9dff Mon Sep 17 00:00:00 2001 From: metalicn20 Date: Mon, 20 Sep 2021 19:15:33 +0430 Subject: [PATCH] Implement reserved addresses --- .../co/nilin/opex/bcgateway/core/model/Address.kt | 10 ++++++++-- .../postgres/dao/ReservedAddressRepository.kt | 12 +++++++++++- .../postgres/impl/ReservedAddressHandlerImpl.kt | 13 +++++++++---- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/BlockchainGateway/bc-gateway-core/src/main/kotlin/co/nilin/opex/bcgateway/core/model/Address.kt b/BlockchainGateway/bc-gateway-core/src/main/kotlin/co/nilin/opex/bcgateway/core/model/Address.kt index ff7a125fe..4efb82bb0 100644 --- a/BlockchainGateway/bc-gateway-core/src/main/kotlin/co/nilin/opex/bcgateway/core/model/Address.kt +++ b/BlockchainGateway/bc-gateway-core/src/main/kotlin/co/nilin/opex/bcgateway/core/model/Address.kt @@ -2,7 +2,13 @@ package co.nilin.opex.bcgateway.core.model data class AddressType(val id: Long, val type: String, val addressRegex: String, val memoRegex: String) data class ReservedAddress(val address: String, val memo: String?, val type: AddressType) -data class AssignedAddress(val uuid: String, val address: String, val memo: String?, val type: AddressType, val chains: MutableList ){ +data class AssignedAddress( + val uuid: String, + val address: String, + val memo: String?, + val type: AddressType, + val chains: MutableList +) { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -24,4 +30,4 @@ data class AssignedAddress(val uuid: String, val address: String, val memo: Stri result = 31 * result + type.hashCode() return result } -} \ No newline at end of file +} diff --git a/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/dao/ReservedAddressRepository.kt b/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/dao/ReservedAddressRepository.kt index a48a80366..738a701fe 100644 --- a/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/dao/ReservedAddressRepository.kt +++ b/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/dao/ReservedAddressRepository.kt @@ -1,8 +1,18 @@ package co.nilin.opex.port.bcgateway.postgres.dao import co.nilin.opex.port.bcgateway.postgres.model.ReservedAddressModel +import org.springframework.data.r2dbc.repository.Modifying +import org.springframework.data.r2dbc.repository.Query import org.springframework.data.repository.reactive.ReactiveCrudRepository import org.springframework.stereotype.Repository +import reactor.core.publisher.Mono @Repository -interface ReservedAddressRepository : ReactiveCrudRepository \ No newline at end of file +interface ReservedAddressRepository : ReactiveCrudRepository { + @Query("select * from reserved_addresses where address_type = :addressType order by id DESC") + fun peekFirstAdded(addressType: Long): Mono + + @Modifying + @Query("delete from reserved_addresses where address = :address and (memo is null or memo = :memo)") + fun remove(address: String, memo: String?): Mono +} diff --git a/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/impl/ReservedAddressHandlerImpl.kt b/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/impl/ReservedAddressHandlerImpl.kt index ed2e0e547..bb7d0f54a 100644 --- a/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/impl/ReservedAddressHandlerImpl.kt +++ b/BlockchainGateway/bc-gateway-ports/bc-persister-postgres/src/main/kotlin/co/nilin/opex/port/bcgateway/postgres/impl/ReservedAddressHandlerImpl.kt @@ -3,15 +3,20 @@ package co.nilin.opex.port.bcgateway.postgres.impl import co.nilin.opex.bcgateway.core.model.AddressType import co.nilin.opex.bcgateway.core.model.ReservedAddress import co.nilin.opex.bcgateway.core.spi.ReservedAddressHandler +import co.nilin.opex.port.bcgateway.postgres.dao.ReservedAddressRepository +import kotlinx.coroutines.reactive.awaitFirst +import kotlinx.coroutines.reactive.awaitFirstOrNull import org.springframework.stereotype.Component @Component -class ReservedAddressHandlerImpl: ReservedAddressHandler { +class ReservedAddressHandlerImpl(private val reservedAddressRepository: ReservedAddressRepository) : + ReservedAddressHandler { override suspend fun peekReservedAddress(addressType: AddressType): ReservedAddress? { - TODO("Not yet implemented") + return reservedAddressRepository.peekFirstAdded(addressType.id) + .map { ReservedAddress(it.address, it.memo, addressType) }.awaitFirstOrNull() } override suspend fun remove(reservedAddress: ReservedAddress) { - TODO("Not yet implemented") + reservedAddressRepository.remove(reservedAddress.address, reservedAddress.memo).awaitFirst() } -} \ No newline at end of file +}