user list for moderation of pending users - #877

This commit is contained in:
Laurent GAY
2025-09-13 19:57:53 +02:00
parent 23cd7333c4
commit 726a5e1d78
8 changed files with 252 additions and 8 deletions

View File

@@ -332,6 +332,11 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
description: "Filter users by current signed-in IP address"
)
arg(:pending_user, :boolean,
default_value: false,
description: "Filter users by pending or not"
)
arg(:page, :integer, default_value: 1, description: "The page in the paginated users list")
arg(:limit, :integer, default_value: 10, description: "The limit of users per page")

View File

@@ -290,6 +290,7 @@ defmodule Mobilizon.Users do
@spec list_users(Keyword.t()) :: Page.t(User.t())
def list_users(options) do
User
|> filter_by_pending(Keyword.get(options, :pending_user))
|> filter_by_email(Keyword.get(options, :email))
|> filter_by_ip(Keyword.get(options, :current_sign_in_ip))
|> sort(Keyword.get(options, :sort), Keyword.get(options, :direction))
@@ -534,6 +535,11 @@ defmodule Mobilizon.Users do
where(User, [u], u.id == ^user_id)
end
@spec filter_by_pending(Ecto.Queryable.t(), Boolean.t() | nil) :: Ecto.Query.t()
defp filter_by_pending(query, nil), do: query
defp filter_by_pending(query, true), do: where(query, [q], q.role == :pending)
defp filter_by_pending(query, false), do: where(query, [q], q.role != :pending)
@spec filter_by_email(Ecto.Queryable.t(), String.t() | nil) :: Ecto.Query.t()
defp filter_by_email(query, nil), do: query
defp filter_by_email(query, ""), do: query