Skip to content

Instantly share code, notes, and snippets.

@ncornwell
Forked from michaeldiamant/gist:2892756
Created June 13, 2012 04:12
Show Gist options
  • Save ncornwell/2921826 to your computer and use it in GitHub Desktop.
Save ncornwell/2921826 to your computer and use it in GitHub Desktop.
Extensible trade execution processor
object ExtensibleTradeExecutionProcessor extends TradeExecutionProcessor {
def process(requestId: String,
executionPrice: BigDecimal,
requestedTradeRepository: RequestedTradeRepository,
priceMutators: Set[(RequestedTrade, BigDecimal) => BigDecimal]): Option[ExecutedTrade] =
for {
requestedTrade <- requestedTradeRepository.findById(requestId)
reportedPrice <- priceMutators.foldLeft(executionPrice)((price, mutator) => mutator(requestedTrade, price)).some
} yield
ExecutedTrade(
requestId = requestedTrade.id,
executedPrice = executionPrice,
reportedPrice = reportedPrice
)
}
//In App Config
val tradeExecutionProcessor(requestedTradeRepository: RequestedTradeRepository,
priceMutators: Set[(RequestedTrade, BigDecimal)
):(String, BigDecimal) => Option[ExecutedTrade] =
ExtensibleTradeExecutionProcessor.proces(_, _, requestedTradeRepository priceMutators)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment