# `PhoenixKitEcommerce.Events`
[🔗](https://github.com/BeamLabEU/phoenix_kit_ecommerce/blob/v0.1.8/lib/phoenix_kit_ecommerce/events.ex#L1)

PubSub event broadcasting for Shop module.

This module provides functions to broadcast cart changes across
multiple browser tabs and devices for the same user/session, as well
as product, category, and inventory updates for real-time admin dashboards.

## Topics

- `shop:cart:user:{user_uuid}` - Cart events for authenticated users
- `shop:cart:session:{session_id}` - Cart events for guest sessions
- `shop:products` - Product events (created, updated, deleted)
- `shop:categories` - Category events (created, updated, deleted)
- `shop:inventory` - Inventory events (stock changes)
- `shop:products:{product_uuid}` - Individual product events

## Events

### Cart Events
- `{:cart_updated, cart}` - Cart totals changed (generic update)
- `{:item_added, cart, item}` - Item added to cart
- `{:item_removed, cart, item_uuid}` - Item removed from cart
- `{:quantity_updated, cart, item}` - Item quantity changed
- `{:shipping_selected, cart}` - Shipping method selected/changed
- `{:payment_selected, cart}` - Payment option selected/changed
- `{:cart_cleared, cart}` - All items removed from cart

### Product Events
- `{:product_created, product}` - New product created
- `{:product_updated, product}` - Product updated
- `{:product_deleted, product_uuid}` - Product deleted
- `{:products_bulk_status_changed, product_uuids, status}` - Bulk status update

### Category Events
- `{:category_created, category}` - New category created
- `{:category_updated, category}` - Category updated
- `{:category_deleted, category_uuid}` - Category deleted

### Inventory Events
- `{:inventory_updated, product_uuid, stock_change}` - Stock level changed

## Examples

    # Subscribe to cart updates for authenticated user
    Events.subscribe_to_user_cart(user_uuid)

    # Subscribe to cart updates for guest session
    Events.subscribe_to_session_cart(session_id)

    # Subscribe to product updates (admin dashboard)
    Events.subscribe_products()

    # Broadcast item added
    Events.broadcast_item_added(cart, item)

    # Broadcast product created
    Events.broadcast_product_created(product)

    # Handle in LiveView
    def handle_info({:item_added, cart, _item}, socket) do
      {:noreply, assign(socket, :cart, cart)}
    end

# `broadcast_cart_cleared`

Broadcasts cart cleared event.

# `broadcast_cart_updated`

Broadcasts a generic cart update event.

# `broadcast_categories_bulk_deleted`

Broadcasts bulk category deleted event.

# `broadcast_categories_bulk_parent_changed`

Broadcasts bulk category parent changed event.

# `broadcast_categories_bulk_status_changed`

Broadcasts bulk category status changed event.

# `broadcast_category_created`

Broadcasts category created event.

# `broadcast_category_deleted`

Broadcasts category deleted event.

# `broadcast_category_updated`

Broadcasts category updated event.

# `broadcast_inventory_updated`

Broadcasts inventory updated event.

# `broadcast_item_added`

Broadcasts item added event.

# `broadcast_item_removed`

Broadcasts item removed event.

# `broadcast_payment_selected`

Broadcasts payment option selected event.

# `broadcast_product_created`

Broadcasts product created event.

# `broadcast_product_deleted`

Broadcasts product deleted event.

# `broadcast_product_updated`

Broadcasts product updated event.

# `broadcast_products_bulk_status_changed`

Broadcasts bulk product status changed event.

# `broadcast_quantity_updated`

Broadcasts quantity updated event.

# `broadcast_shipping_selected`

Broadcasts shipping method selected event.

# `cart_topics`

Returns the appropriate topic(s) for a cart.

# `categories_topic`

Returns the PubSub topic for all categories.

# `inventory_topic`

Returns the PubSub topic for inventory events.

# `product_topic`

Returns the PubSub topic for a specific product.

# `products_topic`

Returns the PubSub topic for all products.

# `session_cart_topic`

Returns the PubSub topic for a session's cart.

# `subscribe_categories`

Subscribes to category events.

# `subscribe_inventory`

Subscribes to inventory events.

# `subscribe_product`

Subscribes to events for a specific product.

# `subscribe_products`

Subscribes to product events.

# `subscribe_to_cart`

Subscribes to cart events for a specific cart.
Subscribes to all relevant topics (user and/or session).

# `subscribe_to_session_cart`

Subscribes to cart events for a guest session.

# `subscribe_to_user_cart`

Subscribes to cart events for an authenticated user.

# `unsubscribe_from_cart`

Unsubscribes from cart events for a specific cart.

# `unsubscribe_from_session_cart`

Unsubscribes from cart events for a guest session.

# `unsubscribe_from_user_cart`

Unsubscribes from cart events for an authenticated user.

# `user_cart_topic`

Returns the PubSub topic for a user's cart.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
