@@ -3,7 +3,12 @@ package com.kkanojia.example.actors
33import scala .collection .immutable .HashSet
44import scala .collection .mutable
55
6- import akka .actor .{Actor , ActorRef , Stash }
6+ import akka .NotUsed
7+ import akka .actor .{Actor , ActorLogging , ActorRef , Stash }
8+ import akka .persistence .query .{EventEnvelope , PersistenceQuery }
9+ import akka .persistence .query .journal .leveldb .scaladsl .LeveldbReadJournal
10+ import akka .stream .ActorMaterializer
11+ import akka .stream .scaladsl .Source
712import com .kkanojia .example .actors .TradeActor .{TradeCreated , TradeUpdated }
813import com .kkanojia .example .actors .TradeAggregateViewActor .{UnWatchTrades , WatchTrades }
914import com .kkanojia .example .models .Trade
@@ -19,13 +24,29 @@ object TradeAggregateViewActor {
1924
2025}
2126
22- class TradeAggregateViewActor (val id : String
23- ) extends Actor {
27+ class TradeAggregateViewActor (val id : String ) extends Actor {
2428
2529 protected [this ] var watchers = HashSet .empty[ActorRef ]
26-
2730 private val trades = mutable.Map [String , Trade ]()
2831
32+ val queries = PersistenceQuery (context.system).readJournalFor[LeveldbReadJournal ](LeveldbReadJournal .Identifier )
33+ val src : Source [EventEnvelope , NotUsed ] = queries.eventsByTag(" trade-events" , 0L )
34+ implicit val mat = ActorMaterializer ()
35+
36+ src.runForeach { env =>
37+ env.event match {
38+ case TradeCreated (userId, trade) =>
39+ trades(trade.id) = trade
40+ watchers.foreach(_ ! TradeCreated (userId, trade))
41+
42+ case TradeUpdated (userId, trade) =>
43+ trades(trade.id) = trade
44+ watchers.foreach(_ ! TradeUpdated (userId, trade))
45+
46+ case _ => println(s " Unknown event $env" )
47+ }
48+ }
49+
2950 override def receive : Receive = {
3051
3152 case WatchTrades =>
@@ -36,14 +57,4 @@ class TradeAggregateViewActor(val id: String
3657
3758 }
3859
39- def onEvent : Receive = {
40- case TradeCreated (trade) =>
41- trades(trade.id) = trade
42- watchers.foreach(_ ! TradeCreated (trade))
43-
44- case TradeUpdated (trade) =>
45- trades(trade.id) = trade
46- watchers.foreach(_ ! TradeUpdated (trade))
47-
48- }
4960}
0 commit comments