cover/Elixir.DaProductApp.SaasKit.WebhookHandler.html

1 defmodule DaProductApp.SaasKit.WebhookHandler do
2 @moduledoc """
3 Module for handling SaaS Kit webhook events.
4 """
5
6 require Logger
7
8 # @webhook_secret removed: saas_kit dependency no longer present
9
10 @doc """
11 Process incoming webhook from SaaS Kit
12 """
13 def handle_webhook(payload, signature) do
14
:-(
case Jason.decode(payload) do
15 {:ok, event} ->
16
:-(
process_event(event)
17 {:error, :invalid_json} ->
18
:-(
Logger.error("Invalid JSON in webhook payload")
19 {:error, :invalid_json}
20 error ->
21
:-(
Logger.error("Error processing webhook: #{inspect(error)}")
22
:-(
error
23 end
24 end
25
26
27 defp process_event(%{"type" => event_type, "data" => data}) do
28
:-(
case event_type do
29 "subscription.created" ->
30
:-(
handle_subscription_created(data)
31
32 "subscription.updated" ->
33
:-(
handle_subscription_updated(data)
34
35 "subscription.cancelled" ->
36
:-(
handle_subscription_cancelled(data)
37
38 "payment.succeeded" ->
39
:-(
handle_payment_succeeded(data)
40
41 "payment.failed" ->
42
:-(
handle_payment_failed(data)
43
44 "invoice.created" ->
45
:-(
handle_invoice_created(data)
46
47 "user.created" ->
48
:-(
handle_user_created(data)
49
50 "user.updated" ->
51
:-(
handle_user_updated(data)
52
53 _ ->
54
:-(
Logger.info("Unhandled webhook event type: #{event_type}")
55 {:ok, :ignored}
56 end
57 end
58
59 defp handle_subscription_created(data) do
60
:-(
Logger.info("Subscription created: #{inspect(data)}")
61 # Add your business logic here
62 # Example: Update local database, send emails, etc.
63 {:ok, :processed}
64 end
65
66 defp handle_subscription_updated(data) do
67
:-(
Logger.info("Subscription updated: #{inspect(data)}")
68 # Add your business logic here
69 {:ok, :processed}
70 end
71
72 defp handle_subscription_cancelled(data) do
73
:-(
Logger.info("Subscription cancelled: #{inspect(data)}")
74 # Add your business logic here
75 # Example: Disable features, send cancellation email, etc.
76 {:ok, :processed}
77 end
78
79 defp handle_payment_succeeded(data) do
80
:-(
Logger.info("Payment succeeded: #{inspect(data)}")
81 # Add your business logic here
82 # Example: Update subscription status, send receipt, etc.
83 {:ok, :processed}
84 end
85
86 defp handle_payment_failed(data) do
87
:-(
Logger.info("Payment failed: #{inspect(data)}")
88 # Add your business logic here
89 # Example: Send payment failure notification, retry logic, etc.
90 {:ok, :processed}
91 end
92
93 defp handle_invoice_created(data) do
94
:-(
Logger.info("Invoice created: #{inspect(data)}")
95 # Add your business logic here
96 {:ok, :processed}
97 end
98
99 defp handle_user_created(data) do
100
:-(
Logger.info("User created: #{inspect(data)}")
101 # Add your business logic here
102 {:ok, :processed}
103 end
104
105 defp handle_user_updated(data) do
106
:-(
Logger.info("User updated: #{inspect(data)}")
107 # Add your business logic here
108 {:ok, :processed}
109 end
110 end
Line Hits Source