@@ -15,7 +15,18 @@ defmodule CodeCorps.Analytics.Segment do
1515 ```
1616 """
1717
18- alias CodeCorps . { Comment , OrganizationMembership , StripeInvoice , Task , User , UserCategory , UserRole , UserSkill }
18+ alias CodeCorps . {
19+ Comment ,
20+ OrganizationMembership ,
21+ StripeConnectCharge ,
22+ StripeInvoice ,
23+ Task ,
24+ User ,
25+ UserCategory ,
26+ UserRole ,
27+ UserSkill
28+ }
29+
1930 alias Ecto.Changeset
2031
2132 @ api Application . get_env ( :code_corps , :analytics )
@@ -26,9 +37,7 @@ defmodule CodeCorps.Analytics.Segment do
2637 Uses the action on the record to determine the event name that should be passed in for the `track` call.
2738 """
2839 @ spec get_event_name ( atom , struct ) :: String . t
29- def get_event_name ( action , _ ) when action in @ actions_without_properties do
30- friendly_action_name ( action )
31- end
40+ def get_event_name ( action , _ ) when action in @ actions_without_properties , do: friendly_action_name ( action )
3241 def get_event_name ( :created , % OrganizationMembership { } ) , do: "Requested Organization Membership"
3342 def get_event_name ( :edited , % OrganizationMembership { } ) , do: "Approved Organization Membership"
3443 def get_event_name ( :payment_succeeded , % StripeInvoice { } ) , do: "Processed Subscription Payment"
@@ -63,13 +72,15 @@ defmodule CodeCorps.Analytics.Segment do
6372 do_track ( conn , action_name , properties ( record ) )
6473 { :ok , record }
6574 end
66- def track ( { :ok , % { user_id: user_id } = record } , action , nil ) do
75+ def track ( { :error , % Changeset { } = changeset } , _action , _conn ) , do: { :error , changeset }
76+
77+ def track ( { :error , errors } , :deleted , _conn ) , do: { :error , errors }
78+
79+ def track ( { :ok , % { user_id: user_id } = record } , action ) do
6780 action_name = get_event_name ( action , record )
6881 do_track ( user_id , action_name , properties ( record ) )
6982 { :ok , record }
7083 end
71- def track ( { :error , % Changeset { } = changeset } , _action , _conn ) , do: { :error , changeset }
72- def track ( { :error , errors } , :deleted , _conn ) , do: { :error , errors }
7384
7485 @ doc """
7586 Calls `track` with the "Signed In" event in the configured API module.
@@ -122,15 +133,15 @@ defmodule CodeCorps.Analytics.Segment do
122133 organization_id: organization_membership . organization . id
123134 }
124135 end
125- defp properties ( invoice = % StripeInvoice { } ) do
126- revenue = invoice . total / 100 # TODO: this only works for some currencies
127- currency = String . capitalize ( invoice . currency ) # ISO 4127 format
136+ defp properties ( charge = % StripeConnectCharge { } ) do
137+ revenue = charge . amount / 100 # TODO: this only works for some currencies
138+ currency = String . capitalize ( charge . currency ) # ISO 4127 format
128139
129140 % {
141+ charge_id: charge . id ,
130142 currency: currency ,
131- invoice_id: invoice . id ,
132143 revenue: revenue ,
133- user_id: invoice . user_id
144+ user_id: charge . user_id
134145 }
135146 end
136147 defp properties ( task = % Task { } ) do
@@ -167,7 +178,6 @@ defmodule CodeCorps.Analytics.Segment do
167178 % { }
168179 end
169180
170-
171181 defp traits ( user ) do
172182 % {
173183 admin: user . admin ,
0 commit comments