Browse Source

server: Simplify the validators

bitcoin
Alexis Hernandez 6 years ago
parent
commit
21fcb826a0
  1. 9
      server/app/com/xsn/explorer/services/BalanceService.scala
  2. 8
      server/app/com/xsn/explorer/services/BlockService.scala
  3. 21
      server/app/com/xsn/explorer/services/TransactionService.scala
  4. 8
      server/app/com/xsn/explorer/services/validators/package.scala

9
server/app/com/xsn/explorer/services/BalanceService.scala

@ -9,9 +9,8 @@ import com.xsn.explorer.data.async.BalanceFutureDataHandler
import com.xsn.explorer.models.WrappedResult import com.xsn.explorer.models.WrappedResult
import com.xsn.explorer.models.persisted.Balance import com.xsn.explorer.models.persisted.Balance
import com.xsn.explorer.parsers.BalanceOrderingParser import com.xsn.explorer.parsers.BalanceOrderingParser
import com.xsn.explorer.services.validators.AddressValidator import com.xsn.explorer.services.validators._
import javax.inject.Inject import javax.inject.Inject
import org.scalactic.Good
import scala.concurrent.ExecutionContext import scala.concurrent.ExecutionContext
@ -35,11 +34,7 @@ class BalanceService @Inject() (
def getHighest(limit: Limit, lastSeenAddressString: Option[String]): FutureApplicationResult[WrappedResult[List[Balance]]] = { def getHighest(limit: Limit, lastSeenAddressString: Option[String]): FutureApplicationResult[WrappedResult[List[Balance]]] = {
val result = for { val result = for {
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), 100).toFutureOr _ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), 100).toFutureOr
lastSeenAddress <- validate(lastSeenAddressString, addressValidator.validate).toFutureOr
lastSeenAddress <- lastSeenAddressString
.map { string => addressValidator.validate(string).map(Option.apply) }
.getOrElse(Good(None))
.toFutureOr
data <- balanceFutureDataHandler.getHighestBalances(limit, lastSeenAddress).toFutureOr data <- balanceFutureDataHandler.getHighestBalances(limit, lastSeenAddress).toFutureOr
} yield WrappedResult(data) } yield WrappedResult(data)

8
server/app/com/xsn/explorer/services/BlockService.scala

@ -14,7 +14,7 @@ import com.xsn.explorer.models.rpc.{Block, TransactionVIN}
import com.xsn.explorer.models.values.{Blockhash, Height} import com.xsn.explorer.models.values.{Blockhash, Height}
import com.xsn.explorer.parsers.OrderingConditionParser import com.xsn.explorer.parsers.OrderingConditionParser
import com.xsn.explorer.services.logic.{BlockLogic, TransactionLogic} import com.xsn.explorer.services.logic.{BlockLogic, TransactionLogic}
import com.xsn.explorer.services.validators.BlockhashValidator import com.xsn.explorer.services.validators._
import com.xsn.explorer.util.Extensions.FutureOrExt import com.xsn.explorer.util.Extensions.FutureOrExt
import javax.inject.Inject import javax.inject.Inject
import org.scalactic.{Bad, Good} import org.scalactic.{Bad, Good}
@ -42,11 +42,7 @@ class BlockService @Inject() (
implicit writes: Writes[BlockHeader]): FutureApplicationResult[JsValue] = { implicit writes: Writes[BlockHeader]): FutureApplicationResult[JsValue] = {
val result = for { val result = for {
lastSeenHash <- lastSeenHashString lastSeenHash <- validate(lastSeenHashString, blockhashValidator.validate).toFutureOr
.map { string => blockhashValidator.validate(string).map(Option.apply) }
.getOrElse(Good(None))
.toFutureOr
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxHeadersPerQuery).toFutureOr _ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxHeadersPerQuery).toFutureOr
orderingCondition <- orderingConditionParser.parseReuslt(orderingConditionString).toFutureOr orderingCondition <- orderingConditionParser.parseReuslt(orderingConditionString).toFutureOr

21
server/app/com/xsn/explorer/services/TransactionService.scala

@ -9,9 +9,8 @@ import com.xsn.explorer.data.async.TransactionFutureDataHandler
import com.xsn.explorer.models._ import com.xsn.explorer.models._
import com.xsn.explorer.models.transformers._ import com.xsn.explorer.models.transformers._
import com.xsn.explorer.parsers.{OrderingConditionParser, TransactionOrderingParser} import com.xsn.explorer.parsers.{OrderingConditionParser, TransactionOrderingParser}
import com.xsn.explorer.services.validators.{AddressValidator, BlockhashValidator, TransactionIdValidator} import com.xsn.explorer.services.validators._
import javax.inject.Inject import javax.inject.Inject
import org.scalactic._
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import scala.concurrent.ExecutionContext import scala.concurrent.ExecutionContext
@ -57,11 +56,7 @@ class TransactionService @Inject() (
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr _ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr
orderingCondition <- orderingConditionParser.parseReuslt(orderingConditionString).toFutureOr orderingCondition <- orderingConditionParser.parseReuslt(orderingConditionString).toFutureOr
lastSeenTxid <- lastSeenTxidString lastSeenTxid <- validate(lastSeenTxidString, transactionIdValidator.validate).toFutureOr
.map { string => transactionIdValidator.validate(string).map(Option.apply) }
.getOrElse(Good(None))
.toFutureOr
transactions <- transactionFutureDataHandler.getBy(address, limit, lastSeenTxid, orderingCondition).toFutureOr transactions <- transactionFutureDataHandler.getBy(address, limit, lastSeenTxid, orderingCondition).toFutureOr
} yield { } yield {
val lightTxs = transactions.map(toLightWalletTransaction) val lightTxs = transactions.map(toLightWalletTransaction)
@ -88,11 +83,7 @@ class TransactionService @Inject() (
blockhash <- blockhashValidator.validate(blockhashString).toFutureOr blockhash <- blockhashValidator.validate(blockhashString).toFutureOr
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr _ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr
lastSeenTxid <- lastSeenTxidString lastSeenTxid <- validate(lastSeenTxidString, transactionIdValidator.validate).toFutureOr
.map { string => transactionIdValidator.validate(string).map(Option.apply) }
.getOrElse(Good(None))
.toFutureOr
r <- transactionFutureDataHandler.getByBlockhash(blockhash, limit, lastSeenTxid).toFutureOr r <- transactionFutureDataHandler.getByBlockhash(blockhash, limit, lastSeenTxid).toFutureOr
} yield WrappedResult(r) } yield WrappedResult(r)
@ -108,11 +99,7 @@ class TransactionService @Inject() (
blockhash <- blockhashValidator.validate(blockhashString).toFutureOr blockhash <- blockhashValidator.validate(blockhashString).toFutureOr
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr _ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr
lastSeenTxid <- lastSeenTxidString lastSeenTxid <- validate(lastSeenTxidString, transactionIdValidator.validate).toFutureOr
.map { string => transactionIdValidator.validate(string).map(Option.apply) }
.getOrElse(Good(None))
.toFutureOr
transactions <- transactionFutureDataHandler.getTransactionsWithIOBy(blockhash, limit, lastSeenTxid).toFutureOr transactions <- transactionFutureDataHandler.getTransactionsWithIOBy(blockhash, limit, lastSeenTxid).toFutureOr
} yield { } yield {
val lightTxs = transactions.map(toLightWalletTransaction) val lightTxs = transactions.map(toLightWalletTransaction)

8
server/app/com/xsn/explorer/services/validators/package.scala

@ -2,7 +2,7 @@ package com.xsn.explorer.services
import com.alexitc.playsonify.core.ApplicationResult import com.alexitc.playsonify.core.ApplicationResult
import com.alexitc.playsonify.models.ApplicationError import com.alexitc.playsonify.models.ApplicationError
import org.scalactic.{One, Or} import org.scalactic.{Good, One, Or}
package object validators { package object validators {
@ -10,4 +10,10 @@ package object validators {
val maybe = builder(string) val maybe = builder(string)
Or.from(maybe, One(error)) Or.from(maybe, One(error))
} }
def validate[T](maybe: Option[String], validator: String => ApplicationResult[T]): ApplicationResult[Option[T]] = {
maybe
.map { string => validator(string).map(Option.apply) }
.getOrElse(Good(None))
}
} }

Loading…
Cancel
Save