Packages
phoenix_kit
1.7.65
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
Current section
Files
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.
Uses `PhoenixKit.PubSub.Manager` for self-contained PubSub operations.
## Topics
- `phoenix_kit:billing:orders` - Order events (created, updated, confirmed, paid, cancelled)
- `phoenix_kit:billing:invoices` - Invoice events (created, sent, paid, voided)
- `phoenix_kit:billing:profiles` - Billing profile events (created, updated, deleted)
- `phoenix_kit:billing:transactions` - Transaction events (created, refunded)
- `phoenix_kit:billing:credit_notes` - Credit note events (sent, applied)
## 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)
"""
alias PhoenixKit.PubSub.Manager
@orders_topic "phoenix_kit:billing:orders"
@invoices_topic "phoenix_kit:billing:invoices"
@profiles_topic "phoenix_kit:billing:profiles"
@transactions_topic "phoenix_kit:billing:transactions"
@credit_notes_topic "phoenix_kit:billing:credit_notes"
@subscriptions_topic "phoenix_kit:billing:subscriptions"
# ============================================
# SUBSCRIPTIONS
# ============================================
@doc """
Subscribes to order events.
"""
def subscribe_orders do
Manager.subscribe(@orders_topic)
end
@doc """
Subscribes to invoice events.
"""
def subscribe_invoices do
Manager.subscribe(@invoices_topic)
end
@doc """
Subscribes to billing profile events.
"""
def subscribe_profiles do
Manager.subscribe(@profiles_topic)
end
@doc """
Subscribes to transaction events.
"""
def subscribe_transactions do
Manager.subscribe(@transactions_topic)
end
@doc """
Subscribes to credit note events.
"""
def subscribe_credit_notes do
Manager.subscribe(@credit_notes_topic)
end
@doc """
Subscribes to subscription events.
"""
def subscribe_subscriptions do
Manager.subscribe(@subscriptions_topic)
end
@doc """
Subscribes to subscription events for a specific user.
"""
def subscribe_user_subscriptions(user_uuid) do
Manager.subscribe("#{@subscriptions_topic}:user:#{user_uuid}")
end
@doc """
Subscribes to order events for a specific user.
"""
def subscribe_user_orders(user_uuid) do
Manager.subscribe("#{@orders_topic}:user:#{user_uuid}")
end
@doc """
Subscribes to invoice events for a specific user.
"""
def subscribe_user_invoices(user_uuid) do
Manager.subscribe("#{@invoices_topic}:user:#{user_uuid}")
end
@doc """
Subscribes to transaction events for a specific user.
"""
def subscribe_user_transactions(user_uuid) do
Manager.subscribe("#{@transactions_topic}:user:#{user_uuid}")
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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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_uuid}", {: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
# ============================================
# TRANSACTION BROADCASTS
# ============================================
@doc """
Broadcasts transaction created event.
"""
def broadcast_transaction_created(transaction) do
broadcast(@transactions_topic, {:transaction_created, transaction})
broadcast(
"#{@transactions_topic}:user:#{transaction.user_uuid}",
{:transaction_created, transaction}
)
end
@doc """
Broadcasts transaction refunded event.
"""
def broadcast_transaction_refunded(transaction) do
broadcast(@transactions_topic, {:transaction_refunded, transaction})
broadcast(
"#{@transactions_topic}:user:#{transaction.user_uuid}",
{:transaction_refunded, transaction}
)
end
# ============================================
# CREDIT NOTE BROADCASTS
# ============================================
@doc """
Broadcasts credit note sent event.
"""
def broadcast_credit_note_sent(invoice, transaction) do
broadcast(@credit_notes_topic, {:credit_note_sent, invoice, transaction})
end
@doc """
Broadcasts credit note applied event.
"""
def broadcast_credit_note_applied(invoice, transaction, amount) do
broadcast(@credit_notes_topic, {:credit_note_applied, invoice, transaction, amount})
end
# ============================================
# SUBSCRIPTION BROADCASTS
# ============================================
@doc """
Broadcasts subscription created event.
"""
def broadcast_subscription_created(subscription) do
broadcast(@subscriptions_topic, {:subscription_created, subscription})
broadcast(
"#{@subscriptions_topic}:user:#{subscription.user_uuid}",
{:subscription_created, subscription}
)
end
@doc """
Broadcasts subscription cancelled event.
"""
def broadcast_subscription_cancelled(subscription) do
broadcast(@subscriptions_topic, {:subscription_cancelled, subscription})
broadcast(
"#{@subscriptions_topic}:user:#{subscription.user_uuid}",
{:subscription_cancelled, subscription}
)
end
@doc """
Broadcasts subscription renewed event.
"""
def broadcast_subscription_renewed(subscription) do
broadcast(@subscriptions_topic, {:subscription_renewed, subscription})
broadcast(
"#{@subscriptions_topic}:user:#{subscription.user_uuid}",
{:subscription_renewed, subscription}
)
end
@doc """
Broadcasts subscription type changed event.
"""
def broadcast_subscription_type_changed(subscription, old_type_uuid, new_type_uuid) do
broadcast(
@subscriptions_topic,
{:subscription_type_changed, subscription, old_type_uuid, new_type_uuid}
)
broadcast(
"#{@subscriptions_topic}:user:#{subscription.user_uuid}",
{:subscription_type_changed, subscription, old_type_uuid, new_type_uuid}
)
end
@doc """
Broadcasts subscription status changed event.
"""
def broadcast_subscription_status_changed(subscription, old_status, new_status) do
broadcast(
@subscriptions_topic,
{:subscription_status_changed, subscription, old_status, new_status}
)
broadcast(
"#{@subscriptions_topic}:user:#{subscription.user_uuid}",
{:subscription_status_changed, subscription, old_status, new_status}
)
end
# ============================================
# HELPERS
# ============================================
defp broadcast(topic, message) do
Manager.broadcast(topic, message)
end
end