Skip to content

Instantly share code, notes, and snippets.

@mpj
Last active October 5, 2015 21:26
Show Gist options
  • Select an option

  • Save mpj/d244b05da8f51ee9b62d to your computer and use it in GitHub Desktop.

Select an option

Save mpj/d244b05da8f51ee9b62d to your computer and use it in GitHub Desktop.
const customerRevenueNode = (store) => {
return createNode({
accessMemory: {
'orderCancelled': (order) =>
_store.GetByOrderId(order.orderId)
.then((snapshot) => {
snapshot,
save: (nextState) => _store.save(nextState)
}),
'orderPlaced': (order) =>
_store.GetByCustomerId(order.orderId)
.then((snapshot) => {
snapshot,
save: (nextState) => _store.save(nextState)
}),
'orderDelivered': (order) =>
_store.GetByOrderId(order.orderId)
.then((snapshot) => {
snapshot,
save: (nextState) => _store.save(nextState)
})
},
transform: {
'orderCancelled': (order, state) => R.merge({
{ customerId: order.customerId },
{
pendingOrderAmounts: R.reject(
(state.pendingOrderAmounts || []),
amount => amount.id === order.id
)
}
),
'orderPlaced': (order, state) => R.merge(
{ customerId: order.customerId },
{
pendingOrderAmounts: R.reject(
(state.pendingOrderAmounts || []),
[{ id: order.id, amount: order.amount }]
)
}
),
'orderDelivered': (order, state) => R.merge({
{ customerId: order.customerId },
{
pendingOrderAmounts: R.reject(
(state.pendingOrderAmounts || []),
[{ id: order.id, amount: order.amount }]
),
aggregatedRevenue:
state.aggregatedRevenue +
R.find(state.pendingOrderAmounts,
amount => amount.id === order.id).amount
}
})
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment