@@ -69,20 +69,49 @@ defmodule Algora.Repo do
69
69
)
70
70
end
71
71
72
- @ spec insert_with_activity ( Ecto.Changeset . t ( ) | Ecto.Multi . t ( ) , struct ( ) ) ::
72
+ @ spec insert_with_activity ( Ecto.Changeset . t ( ) , struct ( ) ) ::
73
73
{ :ok , struct ( ) } | { :error , Ecto.Changeset . t ( ) }
74
74
def insert_with_activity ( changeset , activity ) do
75
- response =
76
- Ecto.Multi . new ( )
77
- |> Ecto.Multi . insert ( :target , changeset )
78
- |> Ecto.Multi . insert ( :activity , fn % { target: target } ->
79
- Algora.Activities.Activity . build_activity ( target , Map . put ( activity , :id , target . id ) )
80
- end )
81
- |> Oban . insert ( :notification , fn % { activity: activity , target: target } ->
82
- Algora.Activities.Notifier . changeset ( activity , target )
83
- end )
84
- |> transaction ( )
75
+ Ecto.Multi . new ( )
76
+ |> Ecto.Multi . insert ( :target , changeset )
77
+ |> with_activity ( activity )
78
+ |> transaction ( )
79
+ |> extract_target ( )
80
+ end
81
+
82
+ @ spec update_with_activity ( Ecto.Changeset . t ( ) , struct ( ) ) ::
83
+ { :ok , struct ( ) } | { :error , Ecto.Changeset . t ( ) }
84
+ def update_with_activity ( changeset , activity ) do
85
+ Ecto.Multi . new ( )
86
+ |> Ecto.Multi . update ( :target , changeset )
87
+ |> with_activity ( activity )
88
+ |> transaction ( )
89
+ |> extract_target ( )
90
+ end
91
+
92
+ @ spec delete_with_activity ( Ecto.Changeset . t ( ) , struct ( ) ) ::
93
+ { :ok , struct ( ) } | { :error , Ecto.Changeset . t ( ) }
94
+ def delete_with_activity ( changeset , activity ) do
95
+ Ecto.Multi . new ( )
96
+ |> Ecto.Multi . delete ( :target , changeset )
97
+ |> with_activity ( activity )
98
+ |> transaction ( )
99
+ |> extract_target ( )
100
+ end
101
+
102
+ @ spec with_activity ( Ecto.Multi . t ( ) , struct ( ) ) ::
103
+ { :ok , struct ( ) } | { :error , Ecto.Changeset . t ( ) }
104
+ def with_activity ( multi , activity ) do
105
+ multi
106
+ |> Ecto.Multi . insert ( :activity , fn % { target: target } ->
107
+ Algora.Activities.Activity . build_activity ( target , Map . put ( activity , :id , target . id ) )
108
+ end )
109
+ |> Oban . insert ( :notification , fn % { activity: activity , target: target } ->
110
+ Algora.Activities.Notifier . changeset ( activity , target )
111
+ end )
112
+ end
85
113
114
+ defp extract_target ( response ) do
86
115
case response do
87
116
{ :ok , % { target: target } } -> { :ok , target }
88
117
{ :error , % { target: target } } -> { :error , target }
0 commit comments