fix n+1 queries with invite card
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-03-18 13:46:26 -04:00
parent 8f288afeb9
commit b0a336ceff
16 changed files with 161 additions and 287 deletions

View File

@ -109,6 +109,19 @@ defmodule Memex.Accounts.Invites do
)
end
@spec get_use_counts([Invite.t()], User.t()) :: %{Invite.id() => non_neg_integer()}
def get_use_counts(invites, %User{role: :admin}) do
invite_ids = invites |> Enum.map(fn %{id: invite_id} -> invite_id end)
Repo.all(
from u in User,
where: u.invite_id in ^invite_ids,
group_by: u.invite_id,
select: {u.invite_id, count(u.id)}
)
|> Map.new()
end
@spec decrement_invite_changeset(Invite.t()) :: Invite.changeset()
defp decrement_invite_changeset(%Invite{uses_left: nil} = invite) do
invite |> Invite.update_changeset(%{})