Skip to content

Commit d0c297f

Browse files
committed
Extract repository
1 parent 401afde commit d0c297f

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
require_relative "../../../shared/lib/project_management"
22
require_relative "project_management/handler"
33
require_relative "project_management/issue"
4+
require_relative "project_management/repository"
Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
module ProjectManagement
22
class Handler
33
def initialize(event_store)
4-
@event_store = event_store
54
@decider = Issue
5+
@repository = Repository.new(event_store)
66
end
77

88
def call(cmd)
9-
state =
10-
@event_store
11-
.read
12-
.stream(stream_name(cmd.id))
13-
.reduce(@decider.initial_state(cmd.id)) do |state, event|
14-
@decider.evolve(state, event)
15-
end
9+
state = @repository.load(cmd.id, @decider)
1610

1711
case result = @decider.decide(cmd, state)
1812
when StandardError
1913
raise Error
2014
else
21-
@event_store.append(result, stream_name: stream_name(cmd.id))
15+
@repository.store(cmd.id, result)
2216
end
2317
end
24-
25-
private
26-
27-
def stream_name(id) = "Issue$#{id}"
2818
end
2919
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module ProjectManagement
2+
class Repository
3+
def initialize(event_store)
4+
@event_store = event_store
5+
end
6+
7+
def load(id, decider)
8+
@event_store
9+
.read
10+
.stream(stream_name(id))
11+
.reduce(decider.initial_state(id)) do |state, event|
12+
decider.evolve(state, event)
13+
end
14+
end
15+
16+
def store(id, events)
17+
@event_store.append(events, stream_name: stream_name(id))
18+
end
19+
20+
private
21+
22+
def stream_name(id) = "Issue$#{id}"
23+
end
24+
end

0 commit comments

Comments
 (0)