File tree Expand file tree Collapse file tree 4 files changed +30
-15
lines changed
Expand file tree Collapse file tree 4 files changed +30
-15
lines changed Original file line number Diff line number Diff line change 11require_relative "../../../shared/lib/project_management"
22require_relative "project_management/issue"
3+ require_relative "project_management/repository"
34require_relative "project_management/issue_projection"
45require_relative "project_management/handler"
Original file line number Diff line number Diff line change 11module ProjectManagement
22 class Handler
33 def initialize ( event_store )
4- @event_store = event_store
4+ @repository = Repository . new ( event_store )
55 end
66
77 def call ( cmd )
@@ -65,13 +65,10 @@ def stop(id)
6565
6666 private
6767
68- def stream_name ( id ) = "Issue$#{ id } "
69-
7068 def with_aggregate ( id )
71- issue =
72- IssueProjection . new ( @event_store ) . call ( Issue . initial , stream_name ( id ) )
73-
74- @event_store . append ( yield ( issue ) , stream_name : stream_name ( id ) )
69+ issue = @repository . load ( id , Issue . initial )
70+ events = yield ( issue )
71+ @repository . store ( id , events )
7572 end
7673 end
7774end
Original file line number Diff line number Diff line change 11module ProjectManagement
22 class IssueProjection
3- def initialize ( event_store )
4- @event_store = event_store
5- end
6-
7- def call ( initial_issue , stream_name )
8- @event_store
9- . read
10- . stream ( stream_name )
3+ def self . call ( query , initial_issue )
4+ query
115 . reduce ( initial_issue ) do |issue , event |
126 case event
137 when IssueOpened
Original file line number Diff line number Diff line change 1+ module ProjectManagement
2+ class Repository
3+ def initialize ( event_store )
4+ @event_store = event_store
5+ end
6+
7+ def load ( id , initial_state )
8+ query =
9+ @event_store
10+ . read
11+ . stream ( stream_name ( id ) )
12+ IssueProjection . call ( query , initial_state )
13+ end
14+
15+ def store ( id , events )
16+ @event_store . append ( events , stream_name : stream_name ( id ) )
17+ end
18+
19+ private
20+
21+ def stream_name ( id ) = "Issue$#{ id } "
22+ end
23+ end
You can’t perform that action at this time.
0 commit comments