fix inbound federation
[akkoma] / lib / pleroma / elasticsearch / store.ex
1 defmodule Pleroma.Elasticsearch do
2 alias Pleroma.Activity
3 alias Pleroma.Elasticsearch.DocumentMappings
4 alias Pleroma.Config
5
6 defp url do
7 Config.get([:elasticsearch, :url])
8 end
9
10 def put_by_id(id) do
11 id
12 |> Activity.get_by_id_with_object()
13 |> maybe_put_into_elasticsearch()
14 end
15
16 def maybe_put_into_elasticsearch({:ok, activity}) do
17 maybe_put_into_elasticsearch(activity)
18 end
19
20 def maybe_put_into_elasticsearch(
21 %{data: %{"type" => "Create"}, object: %{data: %{"type" => "Note"}}} = activity
22 ) do
23 if Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch do
24 actor = Pleroma.Activity.user_actor(activity)
25
26 activity
27 |> Map.put(:user_actor, actor)
28 |> put()
29 end
30 end
31
32 def maybe_put_into_elasticsearch(_) do
33 {:ok, :skipped}
34 end
35
36 def put(%Activity{} = activity) do
37 Elastix.Document.index(
38 url(),
39 "activities",
40 "activity",
41 DocumentMappings.Activity.id(activity),
42 DocumentMappings.Activity.encode(activity)
43 )
44 end
45
46 def bulk_post(data, :activities) do
47 d =
48 data
49 |> Enum.map(fn d ->
50 [
51 %{index: %{_id: DocumentMappings.Activity.id(d)}},
52 DocumentMappings.Activity.encode(d)
53 ]
54 end)
55 |> List.flatten()
56
57 Elastix.Bulk.post(
58 url(),
59 d,
60 index: "activities",
61 type: "activity"
62 )
63 end
64
65 def search_activities(q) do
66 Elastix.Search.search(
67 url(),
68 "activities",
69 ["activity"],
70 q
71 )
72 end
73 end