Browse Source

server: Add TransactionDetails model

scalafmt-draft
Alexis Hernandez 7 years ago
parent
commit
6c78ca0317
  1. 43
      server/app/com/xsn/explorer/models/TransactionDetails.scala
  2. 19
      server/app/com/xsn/explorer/models/TransactionValue.scala

43
server/app/com/xsn/explorer/models/TransactionDetails.scala

@ -0,0 +1,43 @@
package com.xsn.explorer.models
import play.api.libs.json.{Json, Writes}
case class TransactionDetails(
id: TransactionId,
size: Int,
blockhash: Blockhash,
time: Long,
blocktime: Long,
confirmations: Int,
input: Option[TransactionValue],
output: List[TransactionValue]) {
lazy val fee: BigDecimal = {
val vin = input.map(_.value).getOrElse(BigDecimal(0))
val vout = output.map(_.value).sum
(vin - vout) max 0
}
}
object TransactionDetails {
def from(tx: Transaction, previous: Transaction): TransactionDetails = {
val input = tx.vin.flatMap { vin =>
val voutMaybe = previous.vout.find(_.n == vin.voutIndex)
voutMaybe.flatMap(TransactionValue.from)
}
TransactionDetails
.from(tx)
.copy(input = input)
}
def from(tx: Transaction): TransactionDetails = {
val output = tx.vout.flatMap(TransactionValue.from)
TransactionDetails(tx.id, tx.size, tx.blockhash, tx.time, tx.blocktime, tx.confirmations, None, output)
}
implicit val writes: Writes[TransactionDetails] = Json.writes[TransactionDetails]
}

19
server/app/com/xsn/explorer/models/TransactionValue.scala

@ -0,0 +1,19 @@
package com.xsn.explorer.models
import play.api.libs.json.{Json, Writes}
case class TransactionValue(address: Address, value: BigDecimal)
object TransactionValue {
def from(vout: TransactionVOUT): Option[TransactionValue] = {
val value = vout.value
val addressMaybe = vout.address
addressMaybe.map { address =>
TransactionValue(address, value)
}
}
implicit val writes: Writes[TransactionValue] = Json.writes[TransactionValue]
}
Loading…
Cancel
Save