Current section

Files

Jump to
pow lib extensions invitation ecto context.ex
Raw

lib/extensions/invitation/ecto/context.ex

defmodule PowInvitation.Ecto.Context do
@moduledoc false
alias Ecto.Changeset
alias Pow.Ecto.Context
alias PowInvitation.Ecto.Schema
@doc """
Creates an invited user
"""
@spec create(map(), map(), Config.t()) :: {:ok, map()} | {:error, Changeset.t()}
def create(inviter_user, params, config) do
user_mod = Context.user_schema_mod(config)
user_mod
|> struct()
|> user_mod.invite_changeset(inviter_user, params)
|> Context.do_insert(config)
end
@doc """
Updates an invited user and accepts invitation.
"""
@spec update(map(), map(), Config.t()) :: {:ok, map()} | {:error, Changeset.t()}
def update(user, params, config) do
user
|> Schema.accept_invitation_changeset(params)
|> Context.do_update(config)
end
@doc """
Finds an invited user by the `invitation_token` column.
Ignores users with `:invitation_accepted_at` set.
"""
@spec get_by_invitation_token(binary(), Config.t()) :: map() | nil
def get_by_invitation_token(token, config) do
[invitation_token: token]
|> Context.get_by(config)
|> case do
%{invitation_accepted_at: nil} = user -> user
_ -> nil
end
end
end