activity: add with_preloaded_object() convenience
authorWilliam Pitcock <nenolod@dereferenced.org>
Sat, 23 Mar 2019 00:09:56 +0000 (00:09 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Sat, 23 Mar 2019 00:09:56 +0000 (00:09 +0000)
lib/pleroma/activity.ex

index 2f91b3c7710af16536dd7080c86597a75ccb0fc3..370721070f70fc2f55c7e437a468b2542a5b4f05 100644 (file)
@@ -44,11 +44,29 @@ defmodule Pleroma.Activity do
     #    fragment("(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", o.data, activity.data))
     # |> preload([activity, object], [object: object])
     # ```
+    #
+    # As a convenience, Activity.with_preloaded_object() sets up an inner join and preload for the
+    # typical case.
     has_one(:object, Object, on_delete: :nothing, foreign_key: :id)
 
     timestamps()
   end
 
+  def with_preloaded_object(query) do
+    query
+    |> join(
+      :inner,
+      [activity],
+      o in Object,
+      fragment(
+        "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
+        o.data,
+        activity.data
+      )
+    )
+    |> preload([activity, object], object: object)
+  end
+
   def get_by_ap_id(ap_id) do
     Repo.one(
       from(