| defmodule Plausible.CustomerSupport.Resource.User do |
| @moduledoc false |
| use Plausible.CustomerSupport.Resource, type: "user" |
| alias Plausible.Repo |
|
|
| @impl true |
| def path(id) do |
| Routes.customer_support_user_path(PlausibleWeb.Endpoint, :show, id) |
| end |
|
|
| @impl true |
| def get(id) do |
| Repo.get!(Plausible.Auth.User, id) |
| |> Repo.preload(team_memberships: :team) |
| end |
|
|
| @impl true |
| def search(input, opts \\ []) |
|
|
| def search("", opts) do |
| limit = Keyword.fetch!(opts, :limit) |
|
|
| q = |
| from u in Plausible.Auth.User, |
| order_by: [ |
| desc: :id |
| ], |
| preload: [:owned_teams], |
| limit: ^limit |
|
|
| Repo.all(q) |
| end |
|
|
| def search(input, opts) do |
| limit = Keyword.fetch!(opts, :limit) |
|
|
| q = |
| from u in Plausible.Auth.User, |
| where: ilike(u.email, ^"%#{input}%") or ilike(u.name, ^"%#{input}%"), |
| order_by: [ |
| desc: fragment("?.name = ?", u, ^input), |
| desc: fragment("?.email = ?", u, ^input), |
| asc: u.name |
| ], |
| preload: [:owned_teams], |
| limit: ^limit |
|
|
| Repo.all(q) |
| end |
| end |
|
|