-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathretro_pub_sub.ex
97 lines (79 loc) · 3.12 KB
/
retro_pub_sub.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
defmodule LittleRetro.Retros.EventHandlers.RetroPubSub do
alias LittleRetro.Retros.Events.DiscussionMovedBack
alias LittleRetro.Retros.Events.DiscussionAdvanced
alias LittleRetro.Retros.Events.ActionItemRemoved
alias LittleRetro.Retros.Events.ActionItemTextEdited
alias LittleRetro.Retros.Events.ActionItemCreated
alias LittleRetro.Retros.Events.UserRemovedVoteFromCard
alias LittleRetro.Retros.Events.UserVotedForCard
alias LittleRetro.Retros.Events.CardRemovedFromGroup
alias LittleRetro.Retros.Events.CardsGrouped
alias LittleRetro.Retros.Events.PhaseChanged
alias LittleRetro.Retros.Events.CardDeleted
alias LittleRetro.Retros.Events.CardTextEdited
alias LittleRetro.Retros.Events.CardCreated
alias LittleRetro.Retros
alias LittleRetro.Retros.Events.UserRemovedByEmail
alias Phoenix.PubSub
alias LittleRetro.Retros.Events.UserAddedByEmail
alias LittleRetro.CommandedApplication
use Commanded.Event.Handler,
application: CommandedApplication,
name: "RetroPubSub",
start_from: :current
def handle(%UserAddedByEmail{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%UserRemovedByEmail{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
# The atom `:author_id` doesn't exist elsewhere. We need it here to ensure the atom exists before JSON deserialization
def handle(%CardCreated{retro_id: retro_id, id: id, author_id: _author_id}, _metadata) do
broadcast(retro_id, {:card_created, %{retro: Retros.get(retro_id), card_id: id}})
end
def handle(%CardTextEdited{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%CardDeleted{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%PhaseChanged{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(event = %CardsGrouped{retro_id: retro_id}, _metadata) do
broadcast(retro_id, {:cards_grouped, %{card_id: event.card_id, retro: Retros.get(retro_id)}})
end
def handle(event = %CardRemovedFromGroup{retro_id: retro_id}, _metadata) do
broadcast(
retro_id,
{:card_removed_from_group, %{card_id: event.card_id, retro: Retros.get(retro_id)}}
)
end
def handle(%UserVotedForCard{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%UserRemovedVoteFromCard{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%ActionItemCreated{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%ActionItemTextEdited{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%ActionItemRemoved{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%DiscussionAdvanced{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
def handle(%DiscussionMovedBack{retro_id: retro_id}, _metadata) do
broadcast_retro(retro_id)
end
defp broadcast_retro(retro_id) do
broadcast(retro_id, {:retro_updated, Retros.get(retro_id)})
end
defp broadcast(retro_id, msg) do
PubSub.broadcast(LittleRetro.PubSub, "retro:#{retro_id}", msg)
end
end