Browse Source

server: Extract the OrderingConditionParser from the TransactionService

master
Alexis Hernandez 6 years ago
parent
commit
1b359f7585
  1. 22
      server/app/com/xsn/explorer/parsers/OrderingConditionParser.scala
  2. 20
      server/app/com/xsn/explorer/services/TransactionService.scala
  3. 3
      server/test/com/xsn/explorer/services/LedgerSynchronizerServiceSpec.scala

22
server/app/com/xsn/explorer/parsers/OrderingConditionParser.scala

@ -0,0 +1,22 @@
package com.xsn.explorer.parsers
import com.alexitc.playsonify.core.ApplicationResult
import com.alexitc.playsonify.models.ordering.{OrderingCondition, OrderingError}
import org.scalactic.{One, Or}
class OrderingConditionParser {
def parse(
unsafeOrderingCondition: String): Option[OrderingCondition] = unsafeOrderingCondition.toLowerCase match {
case "asc" => Some(OrderingCondition.AscendingOrder)
case "desc" => Some(OrderingCondition.DescendingOrder)
case _ => None
}
def parseReuslt(unsafeOrderingCondition: String): ApplicationResult[OrderingCondition] = {
val maybe = parse(unsafeOrderingCondition)
Or.from(maybe, One(OrderingError.InvalidCondition))
}
}

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

@ -2,7 +2,7 @@ package com.xsn.explorer.services
import com.alexitc.playsonify.core.FutureOr.Implicits.{FutureOps, OrOps}
import com.alexitc.playsonify.core.{FutureApplicationResult, FuturePaginatedResult}
import com.alexitc.playsonify.models.ordering.{OrderingCondition, OrderingError, OrderingQuery}
import com.alexitc.playsonify.models.ordering.OrderingQuery
import com.alexitc.playsonify.models.pagination.{Limit, Offset, PaginatedQuery}
import com.alexitc.playsonify.validators.PaginatedQueryValidator
import com.xsn.explorer.data.async.TransactionFutureDataHandler
@ -10,7 +10,7 @@ import com.xsn.explorer.errors._
import com.xsn.explorer.models._
import com.xsn.explorer.models.transformers._
import com.xsn.explorer.models.values._
import com.xsn.explorer.parsers.TransactionOrderingParser
import com.xsn.explorer.parsers.{OrderingConditionParser, TransactionOrderingParser}
import javax.inject.Inject
import org.scalactic._
import org.slf4j.LoggerFactory
@ -19,6 +19,7 @@ import scala.concurrent.ExecutionContext
class TransactionService @Inject() (
paginatedQueryValidator: PaginatedQueryValidator,
orderingConditionParser: OrderingConditionParser,
transactionOrderingParser: TransactionOrderingParser,
transactionFutureDataHandler: TransactionFutureDataHandler)(
implicit ec: ExecutionContext) {
@ -59,7 +60,7 @@ class TransactionService @Inject() (
}
_ <- paginatedQueryValidator.validate(PaginatedQuery(Offset(0), limit), maxTransactionsPerQuery).toFutureOr
orderingCondition <- getOrderingConditionResult(orderingConditionString).toFutureOr
orderingCondition <- orderingConditionParser.parseReuslt(orderingConditionString).toFutureOr
lastSeenTxid <- {
lastSeenTxidString
@ -135,17 +136,4 @@ class TransactionService @Inject() (
result.toFuture
}
/** TODO: Move to another file */
private def getOrderingConditionResult(unsafeOrderingCondition: String) = {
val maybe = parseOrderingCondition(unsafeOrderingCondition)
Or.from(maybe, One(OrderingError.InvalidCondition))
}
/** TODO: Move to another file */
private def parseOrderingCondition(unsafeOrderingCondition: String): Option[OrderingCondition] = unsafeOrderingCondition.toLowerCase match {
case "asc" => Some(OrderingCondition.AscendingOrder)
case "desc" => Some(OrderingCondition.DescendingOrder)
case _ => None
}
}

3
server/test/com/xsn/explorer/services/LedgerSynchronizerServiceSpec.scala

@ -10,7 +10,7 @@ import com.xsn.explorer.helpers.LedgerHelper._
import com.xsn.explorer.helpers._
import com.xsn.explorer.models.rpc.Block
import com.xsn.explorer.models.values.{Blockhash, Height}
import com.xsn.explorer.parsers.TransactionOrderingParser
import com.xsn.explorer.parsers.{OrderingConditionParser, TransactionOrderingParser}
import com.xsn.explorer.services.logic.{BlockLogic, TransactionLogic}
import org.scalactic.{Bad, Good, One, Or}
import org.scalatest.BeforeAndAfter
@ -212,6 +212,7 @@ class LedgerSynchronizerServiceSpec extends PostgresDataHandlerSpec with BeforeA
private def ledgerSynchronizerService(xsnService: XSNService): LedgerSynchronizerService = {
val transactionService = new TransactionService(
new PaginatedQueryValidator,
new OrderingConditionParser,
new TransactionOrderingParser,
new TransactionFutureDataHandler(transactionDataHandler)(Executors.databaseEC))

Loading…
Cancel
Save