Skip to content

Commit 0f04494

Browse files
committed
server: Add endpoint "GET /addresses/:address/tposcontracts"
1 parent 8c3a0cb commit 0f04494

File tree

5 files changed

+59
-1
lines changed

5 files changed

+59
-1
lines changed

server/app/com/xsn/explorer/models/TPoSContract.scala

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.xsn.explorer.models
22

33
import com.xsn.explorer.models.values.{Address, TransactionId}
44
import enumeratum._
5+
import play.api.libs.json.{Json, Writes}
56

67
import scala.util.Try
78

@@ -65,4 +66,16 @@ object TPoSContract {
6566
final case object Active extends State("ACTIVE")
6667
final case object Closed extends State("CLOSED")
6768
}
69+
70+
implicit val writes: Writes[TPoSContract] = (obj: TPoSContract) => {
71+
Json.obj(
72+
"txid" -> obj.id.txid,
73+
"index" -> obj.id.index,
74+
"owner" -> obj.details.owner,
75+
"merchant" -> obj.details.merchant,
76+
"merchantCommission" -> obj.details.merchantCommission.int,
77+
"time" -> obj.time,
78+
"state" -> obj.state.entryName
79+
)
80+
}
6881
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.xsn.explorer.services
2+
3+
import com.alexitc.playsonify.core.FutureApplicationResult
4+
import com.alexitc.playsonify.core.FutureOr.Implicits.{FutureOps, OrOps}
5+
import com.xsn.explorer.data.async.TPoSContractFutureDataHandler
6+
import com.xsn.explorer.models.{TPoSContract, WrappedResult}
7+
import com.xsn.explorer.services.validators.AddressValidator
8+
import javax.inject.Inject
9+
10+
import scala.concurrent.ExecutionContext
11+
12+
class TPoSContractService @Inject() (
13+
addressValidator: AddressValidator,
14+
tposContractFutureDataHandler: TPoSContractFutureDataHandler)(
15+
implicit ec: ExecutionContext) {
16+
17+
def getBy(addressString: String): FutureApplicationResult[WrappedResult[List[TPoSContract]]] = {
18+
val result = for {
19+
address <- addressValidator.validate(addressString).toFutureOr
20+
contracts <- tposContractFutureDataHandler.getBy(address).toFutureOr
21+
} yield WrappedResult(contracts)
22+
23+
result.toFuture
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.xsn.explorer.services.validators
2+
3+
import com.alexitc.playsonify.core.ApplicationResult
4+
import com.xsn.explorer.errors.AddressFormatError
5+
import com.xsn.explorer.models.values.Address
6+
import org.scalactic.{One, Or}
7+
8+
class AddressValidator {
9+
10+
def validate(string: String): ApplicationResult[Address] = {
11+
val maybe = Address.from(string)
12+
Or.from(maybe, One(AddressFormatError))
13+
}
14+
}

server/app/controllers/AddressesController.scala

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.alexitc.playsonify.models.ordering.OrderingQuery
44
import com.alexitc.playsonify.models.pagination.{Limit, Offset, PaginatedQuery}
55
import com.xsn.explorer.models.LightWalletTransaction
66
import com.xsn.explorer.models.persisted.Transaction
7-
import com.xsn.explorer.services.{AddressService, TransactionService}
7+
import com.xsn.explorer.services.{AddressService, TPoSContractService, TransactionService}
88
import com.xsn.explorer.util.Extensions.BigDecimalExt
99
import controllers.common.{Codecs, MyJsonController, MyJsonControllerComponents}
1010
import javax.inject.Inject
@@ -13,6 +13,7 @@ import play.api.libs.json._
1313
class AddressesController @Inject() (
1414
addressService: AddressService,
1515
transactionService: TransactionService,
16+
tposContractService: TPoSContractService,
1617
cc: MyJsonControllerComponents)
1718
extends MyJsonController(cc) {
1819

@@ -60,6 +61,10 @@ class AddressesController @Inject() (
6061
def getUnspentOutputs(address: String) = public { _ =>
6162
addressService.getUnspentOutputs(address)
6263
}
64+
65+
def getTPoSContracts(address: String) = public { _ =>
66+
tposContractService.getBy(address)
67+
}
6368
}
6469

6570
object AddressesController {

server/conf/routes

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ POST /transactions controllers.TransactionsController.sendRawTrans
1212

1313
GET /addresses/:address controllers.AddressesController.getBy(address: String)
1414
GET /addresses/:address/transactions controllers.AddressesController.getTransactions(address: String, offset: Int ?= 0, limit: Int ?= 10, orderBy: String ?= "")
15+
GET /addresses/:address/tposcontracts controllers.AddressesController.getTPoSContracts(address: String)
1516
GET /v2/addresses/:address/transactions controllers.AddressesController.getLightWalletTransactions(address: String, limit: Int ?= 10, lastSeenTxid: Option[String], order: String ?= "desc")
1617
GET /addresses/:address/utxos controllers.AddressesController.getUnspentOutputs(address: String)
1718

0 commit comments

Comments
 (0)