Merge remote-tracking branch 'upstream/develop' into develop
[akkoma] / lib / mix / tasks / pleroma / activity.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Mix.Tasks.Pleroma.Activity do
6 alias Pleroma.Activity
7 alias Pleroma.Activity.Search
8 alias Pleroma.User
9 alias Pleroma.Web.CommonAPI
10 alias Pleroma.Pagination
11 require Logger
12 import Mix.Pleroma
13 import Ecto.Query
14 @shortdoc "A collection of activity debug tasks"
15 @moduledoc """
16 A collection of activity related tasks
17
18 mix pleroma.activity get <id>
19 """
20 def run(["get", id | _rest]) do
21 start_pleroma()
22
23 id
24 |> Activity.get_by_id()
25 |> IO.inspect()
26 end
27
28 def run(["delete_by_keyword", user, keyword | _rest]) do
29 start_pleroma()
30 u = User.get_by_nickname(user)
31
32 Activity
33 |> Activity.with_preloaded_object()
34 |> Activity.restrict_deactivated_users()
35 |> Activity.Queries.by_author(u)
36 |> query_with(keyword)
37 |> Pagination.fetch_paginated(
38 %{"offset" => 0, "limit" => 20, "skip_order" => false},
39 :offset
40 )
41 |> Enum.map(fn x -> CommonAPI.delete(x.id, u) end)
42 |> Enum.count()
43 |> IO.puts()
44 end
45
46 defp query_with(q, search_query) do
47 %{rows: [[tsc]]} =
48 Ecto.Adapters.SQL.query!(
49 Pleroma.Repo,
50 "select current_setting('default_text_search_config')::regconfig::oid;"
51 )
52
53 from([a, o] in q,
54 where:
55 fragment(
56 "to_tsvector(?::oid::regconfig, ?->>'content') @@ websearch_to_tsquery(?)",
57 ^tsc,
58 o.data,
59 ^search_query
60 )
61 )
62 end
63 end