fix Stripe webhook crash on struct access
All checks were successful
deploy / deploy (push) Successful in 1m0s

Stripe.Checkout.Session is a struct that doesn't implement Access,
so get_in with atom keys fails. Use direct struct field access instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey 2026-02-21 23:36:21 +00:00
parent 762a2ee100
commit a0985bd07e

View File

@ -26,7 +26,7 @@ defmodule BerrypodWeb.StripeWebhookController do
end end
defp handle_event(%Stripe.Event{type: "checkout.session.completed", data: %{object: session}}) do defp handle_event(%Stripe.Event{type: "checkout.session.completed", data: %{object: session}}) do
order_id = get_in(session, [:metadata, "order_id"]) || session.metadata["order_id"] order_id = session.metadata["order_id"]
case Orders.get_order(order_id) do case Orders.get_order(order_id) do
nil -> nil ->
@ -85,7 +85,7 @@ defmodule BerrypodWeb.StripeWebhookController do
end end
defp handle_event(%Stripe.Event{type: "checkout.session.expired", data: %{object: session}}) do defp handle_event(%Stripe.Event{type: "checkout.session.expired", data: %{object: session}}) do
order_id = get_in(session, [:metadata, "order_id"]) || session.metadata["order_id"] order_id = session.metadata["order_id"]
case Orders.get_order(order_id) do case Orders.get_order(order_id) do
nil -> :ok nil -> :ok
@ -116,7 +116,7 @@ defmodule BerrypodWeb.StripeWebhookController do
end end
defp update_shipping_cost(order, session) do defp update_shipping_cost(order, session) do
shipping_amount = get_in(session, [Access.key(:shipping_cost), Access.key(:amount_total)]) shipping_amount = session.shipping_cost && session.shipping_cost.amount_total
if is_integer(shipping_amount) and shipping_amount > 0 do if is_integer(shipping_amount) and shipping_amount > 0 do
new_total = order.subtotal + shipping_amount new_total = order.subtotal + shipping_amount