@@ -3,6 +3,7 @@ defmodule PaperTrail do
3
3
4
4
alias PaperTrail.Version
5
5
alias PaperTrail.RepoClient
6
+ alias PaperTrail.Serializer
6
7
7
8
defdelegate get_version ( record ) , to: PaperTrail.VersionQueries
8
9
defdelegate get_version ( model_or_record , id_or_options ) , to: PaperTrail.VersionQueries
@@ -11,6 +12,12 @@ defmodule PaperTrail do
11
12
defdelegate get_versions ( model_or_record , id_or_options ) , to: PaperTrail.VersionQueries
12
13
defdelegate get_versions ( model , id , options ) , to: PaperTrail.VersionQueries
13
14
defdelegate get_current_model ( version ) , to: PaperTrail.VersionQueries
15
+ defdelegate make_version_struct ( version , model , options ) , to: Serializer
16
+ defdelegate serialize ( data ) , to: Serializer
17
+ defdelegate get_sequence_id ( table_name ) , to: Serializer
18
+ defdelegate add_prefix ( schema , prefix ) , to: Serializer
19
+ defdelegate get_item_type ( data ) , to: Serializer
20
+ defdelegate get_model_id ( model ) , to: Serializer
14
21
15
22
@ doc """
16
23
Intialise paper_trail for existing record
@@ -52,7 +59,7 @@ defmodule PaperTrail do
52
59
changeset_data =
53
60
Map . get ( changeset , :data , changeset )
54
61
|> Map . merge ( % {
55
- id: get_sequence_from_model ( changeset ) + 1 ,
62
+ id: get_sequence_id ( changeset ) + 1 ,
56
63
first_version_id: version_id ,
57
64
current_version_id: version_id
58
65
} )
@@ -155,107 +162,4 @@ defmodule PaperTrail do
155
162
end )
156
163
|> elem ( 1 )
157
164
end
158
-
159
- defp make_version_struct ( % { event: "insert" } , model , options ) do
160
- originator = PaperTrail.RepoClient . originator ( )
161
- originator_ref = options [ originator [ :name ] ] || options [ :originator ]
162
-
163
- % Version {
164
- event: "insert" ,
165
- item_type: get_item_type ( model ) ,
166
- item_id: get_model_id ( model ) ,
167
- item_changes: serialize ( model ) ,
168
- originator_id:
169
- case originator_ref do
170
- nil -> nil
171
- _ -> originator_ref |> Map . get ( :id )
172
- end ,
173
- origin: options [ :origin ] ,
174
- meta: options [ :meta ]
175
- }
176
- |> add_prefix ( options [ :prefix ] )
177
- end
178
-
179
- defp make_version_struct ( % { event: "update" } , changeset , options ) do
180
- originator = PaperTrail.RepoClient . originator ( )
181
- originator_ref = options [ originator [ :name ] ] || options [ :originator ]
182
-
183
- % Version {
184
- event: "update" ,
185
- item_type: get_item_type ( changeset ) ,
186
- item_id: get_model_id ( changeset ) ,
187
- item_changes: changeset . changes ,
188
- originator_id:
189
- case originator_ref do
190
- nil -> nil
191
- _ -> originator_ref |> Map . get ( :id )
192
- end ,
193
- origin: options [ :origin ] ,
194
- meta: options [ :meta ]
195
- }
196
- |> add_prefix ( options [ :prefix ] )
197
- end
198
-
199
- defp make_version_struct ( % { event: "delete" } , model_or_changeset , options ) do
200
- originator = PaperTrail.RepoClient . originator ( )
201
- originator_ref = options [ originator [ :name ] ] || options [ :originator ]
202
-
203
- % Version {
204
- event: "delete" ,
205
- item_type: get_item_type ( model_or_changeset ) ,
206
- item_id: get_model_id ( model_or_changeset ) ,
207
- item_changes: serialize ( model_or_changeset ) ,
208
- originator_id:
209
- case originator_ref do
210
- nil -> nil
211
- _ -> originator_ref |> Map . get ( :id )
212
- end ,
213
- origin: options [ :origin ] ,
214
- meta: options [ :meta ]
215
- }
216
- |> add_prefix ( options [ :prefix ] )
217
- end
218
-
219
- defp get_sequence_from_model ( changeset ) do
220
- table_name =
221
- case Map . get ( changeset , :data ) do
222
- nil -> changeset . __struct__ . __schema__ ( :source )
223
- _ -> changeset . data . __struct__ . __schema__ ( :source )
224
- end
225
-
226
- get_sequence_id ( table_name )
227
- end
228
-
229
- defp get_sequence_id ( table_name ) do
230
- Ecto.Adapters.SQL . query! ( RepoClient . repo ( ) , "select last_value FROM #{ table_name } _id_seq" ) . rows
231
- |> List . first ( )
232
- |> List . first ( )
233
- end
234
-
235
- defp serialize ( % Ecto.Changeset { data: data } ) , do: serialize ( data )
236
-
237
- defp serialize ( model ) do
238
- relationships = model . __struct__ . __schema__ ( :associations )
239
- Map . drop ( model , [ :__struct__ , :__meta__ ] ++ relationships )
240
- end
241
-
242
- defp add_prefix ( changeset , nil ) , do: changeset
243
- defp add_prefix ( changeset , prefix ) , do: Ecto . put_meta ( changeset , prefix: prefix )
244
-
245
- defp get_item_type ( % Ecto.Changeset { data: data } ) , do: get_item_type ( data )
246
- defp get_item_type ( model ) , do: model . __struct__ |> Module . split ( ) |> List . last ( )
247
-
248
- def get_model_id ( % Ecto.Changeset { data: data } ) , do: get_model_id ( data )
249
-
250
- def get_model_id ( model ) do
251
- { _ , model_id } = List . first ( Ecto . primary_key ( model ) )
252
-
253
- case PaperTrail.Version . __schema__ ( :type , :item_id ) do
254
- :integer ->
255
- model_id
256
-
257
- _ ->
258
- "#{ model_id } "
259
- end
260
- end
261
165
end
0 commit comments