fix buggos
[akkoma] / lib / pleroma / elasticsearch / store.ex
index d9e9ed1a73057ee21db2e19a36929cf3cc47b422..f309bf7a5e484ca54652f0d30c8c159123383af9 100644 (file)
@@ -1,45 +1,71 @@
 defmodule Pleroma.Elasticsearch do
   alias Pleroma.Activity
   alias Pleroma.Elasticsearch.DocumentMappings
+  alias Pleroma.Config
 
   defp url do
-    Pleroma.Config.get([:elasticsearch, :url])
+    Config.get([:elasticsearch, :url])
+  end
+
+  def put_by_id(id) do
+    id
+    |> Activity.get_by_id_with_object()
+    |> maybe_put_into_elasticsearch()
+  end
+
+  def maybe_put_into_elasticsearch({:ok, activity}) do
+    maybe_put_into_elasticsearch(activity)
+  end
+
+  def maybe_put_into_elasticsearch(%{data: %{"type" => "Create"}, object: %{data: %{"type" => "Note"}}} = activity) do
+    if Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch do
+      actor = Pleroma.Activity.user_actor(activity)
+
+      activity
+      |> Map.put(:user_actor, actor)
+      |> put()
+    end
+  end
+
+  def maybe_put_into_elasticsearch(_) do
+    {:ok, :skipped}
   end
 
   def put(%Activity{} = activity) do
     Elastix.Document.index(
-        url(),
-        "activities",
-        "activity",
-        DocumentMappings.Activity.id(activity),
-        DocumentMappings.Activity.encode(activity)
+      url(),
+      "activities",
+      "activity",
+      DocumentMappings.Activity.id(activity),
+      DocumentMappings.Activity.encode(activity)
     )
   end
 
   def bulk_post(data, :activities) do
-    d = data
-    |> Enum.map(fn d ->
+    d =
+      data
+      |> Enum.map(fn d ->
         [
-            %{index: %{_id: DocumentMappings.Activity.id(d)}},
-            DocumentMappings.Activity.encode(d)
+          %{index: %{_id: DocumentMappings.Activity.id(d)}},
+          DocumentMappings.Activity.encode(d)
         ]
-    end)
-    |> List.flatten()
+      end)
+      |> List.flatten()
 
     Elastix.Bulk.post(
-        url(),
-        d,
-        index: "activities",
-        type: "activity"
+      url(),
+      d,
+      index: "activities",
+      type: "activity"
     )
   end
 
-  def search(query) do
+  def search_activities(q) do
     Elastix.Search.search(
-        url(),
-        "activities",
-        ["activity"],
-        %{query: %{term: %{content: query}}}
+      url(),
+      "activities",
+      ["activity"],
+      q
     )
   end
 end