1 defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
6 alias Pleroma.Notification
7 alias Pleroma.Pagination
10 def get_followers(user, params \\ %{}) do
12 |> User.get_followers_query()
13 |> Pagination.fetch_paginated(params)
16 def get_friends(user, params \\ %{}) do
18 |> User.get_friends_query()
19 |> Pagination.fetch_paginated(params)
22 def get_notifications(user, params \\ %{}) do
23 options = cast_params(params)
26 |> Notification.for_user_query()
27 |> restrict(:exclude_types, options)
28 |> Pagination.fetch_paginated(params)
31 defp cast_params(params) do
33 exclude_types: {:array, :string}
36 changeset = cast({%{}, param_types}, params, Map.keys(param_types))
40 defp restrict(query, :exclude_types, %{exclude_types: mastodon_types = [_ | _]}) do
43 |> Enum.map(&Activity.from_mastodon_notification_type/1)
47 |> where([q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
50 defp restrict(query, _, _), do: query