3a79d8f206ded11728c788b1f051b2f26ba6c5bd
[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.User
8 alias Pleroma.Web.CommonAPI
9 alias Pleroma.Pagination
10 require Logger
11 import Mix.Pleroma
12 import Ecto.Query
13
14 def run(["get", id | _rest]) do
15 start_pleroma()
16
17 id
18 |> Activity.get_by_id()
19 |> IO.inspect()
20 end
21
22 def run(["delete_by_keyword", user, keyword | _rest]) do
23 start_pleroma()
24 u = User.get_by_nickname(user)
25
26 Activity
27 |> Activity.with_preloaded_object()
28 |> Activity.restrict_deactivated_users()
29 |> Activity.Queries.by_author(u)
30 |> query_with(keyword)
31 |> Pagination.fetch_paginated(
32 %{"offset" => 0, "limit" => 20, "skip_order" => false},
33 :offset
34 )
35 |> Enum.map(fn x -> CommonAPI.delete(x.id, u) end)
36 |> Enum.count()
37 |> IO.puts()
38 end
39
40 defp query_with(q, search_query) do
41 %{rows: [[tsc]]} =
42 Ecto.Adapters.SQL.query!(
43 Pleroma.Repo,
44 "select current_setting('default_text_search_config')::regconfig::oid;"
45 )
46
47 from([a, o] in q,
48 where:
49 fragment(
50 "to_tsvector(?::oid::regconfig, ?->>'content') @@ websearch_to_tsquery(?)",
51 ^tsc,
52 o.data,
53 ^search_query
54 )
55 )
56 end
57 end