Packages

phoenix_kit

1.7.20
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules billing events.ex
Raw

lib/modules/billing/events.ex

defmodule PhoenixKit.Modules.Billing.Events do
@moduledoc """
PubSub events for PhoenixKit Billing system.
Broadcasts billing-related events for real-time updates in LiveViews.
## Topics
- `billing:orders` - Order events (created, updated, confirmed, paid, cancelled)
- `billing:invoices` - Invoice events (created, sent, paid, voided)
- `billing:profiles` - Billing profile events (created, updated, deleted)
## Usage Examples
# Subscribe to order events
PhoenixKit.Modules.Billing.Events.subscribe_orders()
# Handle in LiveView
def handle_info({:order_created, order}, socket) do
# Update UI
{:noreply, socket}
end
# Broadcast order created
PhoenixKit.Modules.Billing.Events.broadcast_order_created(order)
"""
@orders_topic "billing:orders"
@invoices_topic "billing:invoices"
@profiles_topic "billing:profiles"
# ============================================
# SUBSCRIPTIONS
# ============================================
@doc """
Subscribes to order events.
"""
def subscribe_orders do
Phoenix.PubSub.subscribe(pubsub(), @orders_topic)
end
@doc """
Subscribes to invoice events.
"""
def subscribe_invoices do
Phoenix.PubSub.subscribe(pubsub(), @invoices_topic)
end
@doc """
Subscribes to billing profile events.
"""
def subscribe_profiles do
Phoenix.PubSub.subscribe(pubsub(), @profiles_topic)
end
@doc """
Subscribes to order events for a specific user.
"""
def subscribe_user_orders(user_id) do
Phoenix.PubSub.subscribe(pubsub(), "#{@orders_topic}:user:#{user_id}")
end
@doc """
Subscribes to invoice events for a specific user.
"""
def subscribe_user_invoices(user_id) do
Phoenix.PubSub.subscribe(pubsub(), "#{@invoices_topic}:user:#{user_id}")
end
# ============================================
# ORDER BROADCASTS
# ============================================
@doc """
Broadcasts order created event.
"""
def broadcast_order_created(order) do
broadcast(@orders_topic, {:order_created, order})
broadcast("#{@orders_topic}:user:#{order.user_id}", {:order_created, order})
end
@doc """
Broadcasts order updated event.
"""
def broadcast_order_updated(order) do
broadcast(@orders_topic, {:order_updated, order})
broadcast("#{@orders_topic}:user:#{order.user_id}", {:order_updated, order})
end
@doc """
Broadcasts order confirmed event.
"""
def broadcast_order_confirmed(order) do
broadcast(@orders_topic, {:order_confirmed, order})
broadcast("#{@orders_topic}:user:#{order.user_id}", {:order_confirmed, order})
end
@doc """
Broadcasts order paid event.
"""
def broadcast_order_paid(order) do
broadcast(@orders_topic, {:order_paid, order})
broadcast("#{@orders_topic}:user:#{order.user_id}", {:order_paid, order})
end
@doc """
Broadcasts order cancelled event.
"""
def broadcast_order_cancelled(order) do
broadcast(@orders_topic, {:order_cancelled, order})
broadcast("#{@orders_topic}:user:#{order.user_id}", {:order_cancelled, order})
end
# ============================================
# INVOICE BROADCASTS
# ============================================
@doc """
Broadcasts invoice created event.
"""
def broadcast_invoice_created(invoice) do
broadcast(@invoices_topic, {:invoice_created, invoice})
broadcast("#{@invoices_topic}:user:#{invoice.user_id}", {:invoice_created, invoice})
end
@doc """
Broadcasts invoice sent event.
"""
def broadcast_invoice_sent(invoice) do
broadcast(@invoices_topic, {:invoice_sent, invoice})
broadcast("#{@invoices_topic}:user:#{invoice.user_id}", {:invoice_sent, invoice})
end
@doc """
Broadcasts invoice paid event.
"""
def broadcast_invoice_paid(invoice) do
broadcast(@invoices_topic, {:invoice_paid, invoice})
broadcast("#{@invoices_topic}:user:#{invoice.user_id}", {:invoice_paid, invoice})
end
@doc """
Broadcasts invoice voided event.
"""
def broadcast_invoice_voided(invoice) do
broadcast(@invoices_topic, {:invoice_voided, invoice})
broadcast("#{@invoices_topic}:user:#{invoice.user_id}", {:invoice_voided, invoice})
end
# ============================================
# BILLING PROFILE BROADCASTS
# ============================================
@doc """
Broadcasts billing profile created event.
"""
def broadcast_profile_created(profile) do
broadcast(@profiles_topic, {:profile_created, profile})
end
@doc """
Broadcasts billing profile updated event.
"""
def broadcast_profile_updated(profile) do
broadcast(@profiles_topic, {:profile_updated, profile})
end
@doc """
Broadcasts billing profile deleted event.
"""
def broadcast_profile_deleted(profile) do
broadcast(@profiles_topic, {:profile_deleted, profile})
end
# ============================================
# HELPERS
# ============================================
defp broadcast(topic, message) do
Phoenix.PubSub.broadcast(pubsub(), topic, message)
end
defp pubsub do
# Get PubSub from application config, fall back to common patterns
Application.get_env(:phoenix_kit, :pubsub) ||
Application.get_env(:phoenix_kit, :pubsub_server) ||
detect_pubsub()
end
defp detect_pubsub do
# Try to find PubSub from parent application
case Application.get_env(:phoenix_kit, :endpoint) do
nil ->
# Default fallback
:phoenix_kit_pubsub
endpoint when is_atom(endpoint) ->
# Extract app name from endpoint module
endpoint
|> Module.split()
|> List.first()
|> then(&Module.concat(&1, "PubSub"))
end
end
end