Skip to content

Instantly share code, notes, and snippets.

@debasishg
Last active October 29, 2017 20:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save debasishg/33d5a9f0d497abd280a6af2dbb60fbbd to your computer and use it in GitHub Desktop.
Save debasishg/33d5a9f0d497abd280a6af2dbb60fbbd to your computer and use it in GitHub Desktop.
CQRS session on the REPL for Chapter 8
scala> import frdomain.ch8.cqrs.service._
import frdomain.ch8.cqrs.service._
scala> import Scripts._
import Scripts._
scala> import RepositoryBackedAccountInterpreter._
import RepositoryBackedAccountInterpreter._
scala> RepositoryBackedAccountInterpreter(composite)
res0: scalaz.concurrent.Task[frdomain.ch8.cqrs.service.Account] = scalaz.concurrent.Task@4ab3b0a5
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> import \/._
import $bslash$div._
scala> res0.unsafePerformAsync {
| case -\/(ex) => ex.printStackTrace
| case \/-(value) => println(value)
| }
scala> Account(a-123,debasish ghosh,2017-10-29T20:13:03.000+05:30,None,Balance(17000))
scala> for {
| a <- credit("a-123", 1000)
| b <- open("a-124", "john j", Some(org.joda.time.DateTime.now()))
| c <- credit(b.no, 1200)
| } yield c
res4: scalaz.Free[frdomain.ch8.cqrs.lib.Event,frdomain.ch8.cqrs.service.Account] = Gosub(Suspend(Credited(a-123,1000,2017-10-29T20:13:03.915+05:30)),<function1>)
scala> RepositoryBackedAccountInterpreter(res4)
res5: scalaz.concurrent.Task[frdomain.ch8.cqrs.service.Account] = scalaz.concurrent.Task@28d1fb05
scala> res5.unsafePerformSync
res6: frdomain.ch8.cqrs.service.Account = Account(a-124,john j,2017-10-29T20:22:56.000+05:30,None,Balance(1200))
scala> eventLog.events("a-123")
res7: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,List[frdomain.ch8.cqrs.lib.Event[_]]] = \/-(List(Credited(a-123,1000,2017-10-29T20:13:03.000+05:30), Debited(a-123,23000,2017-10-29T20:13:03.000+05:30), Credited(a-123,30000,2017-10-29T20:13:03.000+05:30), Credited(a-123,10000,2017-10-29T20:13:03.000+05:30), Opened(a-123,debasish ghosh,Some(2017-10-29T20:13:03.000+05:30),2017-10-29T20:13:03.000+05:30)))
scala> eventLog.events("a-124")
res8: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,List[frdomain.ch8.cqrs.lib.Event[_]]] = \/-(List(Credited(a-124,1200,2017-10-29T20:13:03.000+05:30), Opened(a-124,john j,Some(2017-10-29T20:22:56.000+05:30),2017-10-29T20:13:03.000+05:30)))
scala> import AccountSnapshot._
import AccountSnapshot._
scala> res7 |+| res8
res9: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,List[frdomain.ch8.cqrs.lib.Event[_]]] = \/-(List(Credited(a-123,1000,2017-10-29T20:13:03.000+05:30), Debited(a-123,23000,2017-10-29T20:13:03.000+05:30), Credited(a-123,30000,2017-10-29T20:13:03.000+05:30), Credited(a-123,10000,2017-10-29T20:13:03.000+05:30), Opened(a-123,debasish ghosh,Some(2017-10-29T20:13:03.000+05:30),2017-10-29T20:13:03.000+05:30), Credited(a-124,1200,2017-10-29T20:13:03.000+05:30), Opened(a-124,john j,Some(2017-10-29T20:22:56.000+05:30),2017-10-29T20:13:03.000+05:30)))
scala> res7 map snapshot
res10: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,scalaz.\/[String,Map[String,frdomain.ch8.cqrs.service.Account]]] = \/-(\/-(Map(a-123 -> Account(a-123,debasish ghosh,2017-10-29T20:13:03.000+05:30,None,Balance(18000)))))
scala> eventLog.allEvents
res11: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,List[frdomain.ch8.cqrs.lib.Event[_]]] = \/-(List(Credited(a-123,1000,2017-10-29T20:13:03.000+05:30), Debited(a-123,23000,2017-10-29T20:13:03.000+05:30), Credited(a-123,30000,2017-10-29T20:13:03.000+05:30), Credited(a-123,10000,2017-10-29T20:13:03.000+05:30), Opened(a-123,debasish ghosh,Some(2017-10-29T20:13:03.000+05:30),2017-10-29T20:13:03.000+05:30), Credited(a-124,1200,2017-10-29T20:13:03.000+05:30), Opened(a-124,john j,Some(2017-10-29T20:22:56.000+05:30),2017-10-29T20:13:03.000+05:30)))
scala> res9 map snapshot
res12: scalaz.\/[frdomain.ch8.cqrs.lib.Common.Error,scalaz.\/[String,Map[String,frdomain.ch8.cqrs.service.Account]]] = \/-(\/-(Map(a-124 -> Account(a-124,john j,2017-10-29T20:22:56.000+05:30,None,Balance(1200)), a-123 -> Account(a-123,debasish ghosh,2017-10-29T20:13:03.000+05:30,None,Balance(18000)))))
scala>
@phderome
Copy link

I have same outcome (my res[n] indices are a bit different, i.e. lower, as it seems you may have removed some REPL instructions between lines 22 and 35)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment