Skip to content

Commit 05a733b

Browse files
committed
Add user_id to events
1 parent 339e94d commit 05a733b

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

lib/code_corps/stripe_service/webhook_processing/event_handler.ex

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandler do
55
ConnectEventHandler, IgnoredEventHandler, PlatformEventHandler
66
}
77

8-
def handle(%Stripe.Event{type: type} = api_event, handler) do
8+
def handle(%Stripe.Event{type: type} = api_event, handler, user_id \\ nil) do
99
with {:ok, endpoint} <- infer_endpoint_from_handler(handler),
10-
{:ok, %StripeEvent{} = local_event} <- find_or_create_event(api_event, endpoint)
10+
{:ok, %StripeEvent{} = local_event} <- find_or_create_event(api_event, endpoint, user_id)
1111
do
1212
case IgnoredEventHandler.should_handle?(type, handler) do
1313
true -> call_ignored_handler(local_event, handler)
@@ -21,20 +21,21 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandler do
2121
defp infer_endpoint_from_handler(ConnectEventHandler), do: {:ok, "connect"}
2222
defp infer_endpoint_from_handler(PlatformEventHandler), do: {:ok, "platform"}
2323

24-
defp find_or_create_event(%Stripe.Event{} = api_event, endpoint) do
24+
defp find_or_create_event(%Stripe.Event{} = api_event, endpoint, user_id) do
2525
case find_event(api_event.id) do
2626
%StripeEvent{status: "processing"} -> {:error, :already_processing}
2727
%StripeEvent{} = local_event -> {:ok, local_event}
28-
nil -> create_event(api_event, endpoint)
28+
nil -> create_event(api_event, endpoint, user_id)
2929
end
3030
end
3131

3232
defp find_event(id_from_stripe) do
3333
Repo.get_by(StripeEvent, id_from_stripe: id_from_stripe)
3434
end
3535

36-
defp create_event(%Stripe.Event{} = api_event, endpoint) do
37-
with {:ok, params} <- StripeEventAdapter.to_params(api_event, %{"endpoint" => endpoint}) do
36+
defp create_event(%Stripe.Event{} = api_event, endpoint, user_id) do
37+
event_with_user_id = Map.merge(api_event, %{user_id: user_id})
38+
with {:ok, params} <- StripeEventAdapter.to_params(event_with_user_id, %{"endpoint" => endpoint}) do
3839
%StripeEvent{} |> StripeEvent.create_changeset(params) |> Repo.insert
3940
end
4041
end

test/lib/code_corps/stripe_service/webhook_processing/event_handler_test.exs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
6565
connect_account = insert(:stripe_connect_account)
6666
event = build_event("account.updated", "account", %Stripe.Account{id: connect_account.id_from_stripe})
6767

68-
{:ok, event} = EventHandler.handle(event, ConnectEventHandler)
68+
{:ok, event} = EventHandler.handle(event, ConnectEventHandler, "acc_123")
6969
assert event.object_type == "account"
7070
assert event.object_id == connect_account.id_from_stripe
7171
assert event.status == "processed"
72+
assert event.user_id == "acc_123"
7273
end
7374

7475
test "handles customer.subscription.updated" do
@@ -93,10 +94,11 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
9394
}
9495
)
9596

96-
{:ok, event} = EventHandler.handle(event, ConnectEventHandler)
97+
{:ok, event} = EventHandler.handle(event, ConnectEventHandler, "acc_123")
9798
assert event.object_type == "subscription"
9899
assert event.object_id == subscription.id_from_stripe
99100
assert event.status == "processed"
101+
assert event.user_id == "acc_123"
100102
end
101103

102104
test "handles customer.subscription.deleted" do
@@ -121,10 +123,11 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
121123
}
122124
)
123125

124-
{:ok, event} = EventHandler.handle(event, ConnectEventHandler)
126+
{:ok, event} = EventHandler.handle(event, ConnectEventHandler, "acc_123")
125127
assert event.object_type == "subscription"
126128
assert event.object_id == subscription.id_from_stripe
127129
assert event.status == "processed"
130+
assert event.user_id == "acc_123"
128131
end
129132

130133
test "handles invoice.payment_succeeded" do
@@ -150,10 +153,11 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
150153
}
151154
)
152155

153-
{:ok, event} = EventHandler.handle(event, ConnectEventHandler)
156+
{:ok, event} = EventHandler.handle(event, ConnectEventHandler, "acc_123")
154157
assert event.object_type == "invoice"
155158
assert event.object_id == "ivc_123"
156159
assert event.status == "processed"
160+
assert event.user_id == "acc_123"
157161

158162
assert Repo.get_by(StripeInvoice, id_from_stripe: "ivc_123")
159163
end
@@ -165,13 +169,15 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
165169

166170
{:ok, event} = EventHandler.handle(event, PlatformEventHandler)
167171
assert event.endpoint == "platform"
172+
assert event.user_id == nil
168173
end
169174

170175
test "sets endpoint to 'connect' when using ConnectEventHandler" do
171176
event = build_event
172177

173-
{:ok, event} = EventHandler.handle(event, ConnectEventHandler)
178+
{:ok, event} = EventHandler.handle(event, ConnectEventHandler, "acc_123")
174179
assert event.endpoint == "connect"
180+
assert event.user_id == "acc_123"
175181
end
176182

177183
test "creates event if id is new" do
@@ -182,6 +188,7 @@ defmodule CodeCorps.StripeService.WebhookProcessing.EventHandlerTest do
182188
assert event.object_id == "stub_id"
183189
assert event.object_type == "any_object"
184190
assert event.status == "unhandled"
191+
assert event.user_id == nil
185192
end
186193

187194
test "uses existing event if id exists" do

0 commit comments

Comments
 (0)