2026-02-18 21:23:15 +00:00
|
|
|
defmodule BerrypodWeb.CartController do
|
2026-02-05 22:11:16 +00:00
|
|
|
@moduledoc """
|
|
|
|
|
API controller for cart session persistence.
|
|
|
|
|
|
|
|
|
|
LiveView cannot write to session directly, so cart updates are persisted
|
|
|
|
|
via this API endpoint called from a JS hook after each cart modification.
|
|
|
|
|
"""
|
|
|
|
|
|
2026-02-18 21:23:15 +00:00
|
|
|
use BerrypodWeb, :controller
|
2026-02-05 22:11:16 +00:00
|
|
|
|
2026-02-18 21:23:15 +00:00
|
|
|
alias Berrypod.Cart
|
2026-02-05 22:11:16 +00:00
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
|
Updates the cart in session.
|
|
|
|
|
|
|
|
|
|
Expects JSON body with `items` as a list of [variant_id, quantity] arrays.
|
|
|
|
|
"""
|
|
|
|
|
def update(conn, %{"items" => items}) when is_list(items) do
|
|
|
|
|
cart_items = Cart.deserialize(items)
|
|
|
|
|
|
|
|
|
|
conn
|
|
|
|
|
|> Cart.put_in_session(cart_items)
|
|
|
|
|
|> json(%{ok: true})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update(conn, _params) do
|
|
|
|
|
conn
|
|
|
|
|
|> put_status(:bad_request)
|
|
|
|
|
|> json(%{error: "Invalid cart data"})
|
|
|
|
|
end
|
|
|
|
|
end
|