[#468] Merged `upstream/develop`, resolved conflicts.
[akkoma] / lib / pleroma / thread_mute.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.ThreadMute do
6 use Ecto.Schema
7 alias Pleroma.{Repo, User, ThreadMute}
8 require Ecto.Query
9
10 schema "thread_mutes" do
11 belongs_to(:user, User, type: Pleroma.FlakeId)
12 field(:context, :string)
13 end
14
15 def changeset(mute, params \\ %{}) do
16 mute
17 |> Ecto.Changeset.cast(params, [:user_id, :context])
18 |> Ecto.Changeset.foreign_key_constraint(:user_id)
19 |> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index)
20 end
21
22 def query(user_id, context) do
23 user_id = Pleroma.FlakeId.from_string(user_id)
24
25 ThreadMute
26 |> Ecto.Query.where(user_id: ^user_id)
27 |> Ecto.Query.where(context: ^context)
28 end
29
30 def add_mute(user_id, context) do
31 %ThreadMute{}
32 |> changeset(%{user_id: user_id, context: context})
33 |> Repo.insert()
34 end
35
36 def remove_mute(user_id, context) do
37 query(user_id, context)
38 |> Repo.delete_all()
39 end
40
41 def check_muted(user_id, context) do
42 query(user_id, context)
43 |> Repo.all()
44 end
45 end