Skip to content

Commit d15e9c1

Browse files
committed
Extract repository
1 parent abbbb91 commit d15e9c1

File tree

4 files changed

+30
-15
lines changed

4 files changed

+30
-15
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require_relative "../../../shared/lib/project_management"
22
require_relative "project_management/issue"
3+
require_relative "project_management/repository"
34
require_relative "project_management/issue_projection"
45
require_relative "project_management/handler"

examples/query_based/lib/project_management/handler.rb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module 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
7774
end

examples/query_based/lib/project_management/issue_projection.rb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
module 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
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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

0 commit comments

Comments
 (0)