All modules, configs, paths, and references updated. 836 tests pass, zero warnings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
47 lines
1.1 KiB
Elixir
47 lines
1.1 KiB
Elixir
defmodule BerrypodWeb.Shop.CheckoutSuccess do
|
|
use BerrypodWeb, :live_view
|
|
|
|
alias Berrypod.Orders
|
|
|
|
@impl true
|
|
def mount(%{"session_id" => session_id}, _session, socket) do
|
|
order = Orders.get_order_by_stripe_session(session_id)
|
|
|
|
# Subscribe to order status updates (webhook may arrive after redirect)
|
|
if order && connected?(socket) do
|
|
Phoenix.PubSub.subscribe(Berrypod.PubSub, "order:#{order.id}:status")
|
|
end
|
|
|
|
# Clear the cart after successful checkout
|
|
socket =
|
|
if order && connected?(socket) do
|
|
BerrypodWeb.CartHook.broadcast_and_update(socket, [])
|
|
else
|
|
socket
|
|
end
|
|
|
|
socket =
|
|
socket
|
|
|> assign(:page_title, "Order confirmed")
|
|
|> assign(:order, order)
|
|
|
|
{:ok, socket}
|
|
end
|
|
|
|
def mount(_params, _session, socket) do
|
|
{:ok, redirect(socket, to: ~p"/")}
|
|
end
|
|
|
|
@impl true
|
|
def handle_info({:order_paid, order}, socket) do
|
|
{:noreply, assign(socket, :order, order)}
|
|
end
|
|
|
|
@impl true
|
|
def render(assigns) do
|
|
~H"""
|
|
<BerrypodWeb.PageTemplates.checkout_success {assigns} />
|
|
"""
|
|
end
|
|
end
|