package controllers import javax.inject.Inject import com.alexitc.playsonify.models.{Limit, Offset, OrderingQuery, PaginatedQuery} import com.xsn.explorer.models.Transaction import com.xsn.explorer.services.{AddressService, TransactionService} import com.xsn.explorer.util.Extensions.BigDecimalExt import controllers.common.{MyJsonController, MyJsonControllerComponents} import play.api.libs.json._ class AddressesController @Inject() ( addressService: AddressService, transactionService: TransactionService, cc: MyJsonControllerComponents) extends MyJsonController(cc) { def getBy(address: String) = publicNoInput { _ => addressService.getBy(address) } def getTransactions(address: String, offset: Int, limit: Int, ordering: String) = publicNoInput { _ => val paginatedQuery = PaginatedQuery(Offset(offset), Limit(limit)) transactionService.getTransactions(address, paginatedQuery, OrderingQuery(ordering)) } /** * Format to keep compatibility with the previous approach using the RPC api. */ implicit private val writes: Writes[Transaction.Output] = Writes { obj => val values = Map( "address" -> JsString(obj.address.string), "txid" -> JsString(obj.txid.string), "script" -> JsString(obj.script.string), "outputIndex" -> JsNumber(obj.index), "satoshis" -> JsNumber(BigDecimal(obj.value.toSatoshis)) ) JsObject.apply(values) } def getUnspentOutputs(address: String) = publicNoInput { _ => addressService.getUnspentOutputs(address) } }