lib/auth/signin/index.ex

defmodule Rivet.Auth.Signin do
  alias Rivet.Auth
  alias Rivet.Ident.User
  require Logger

  @spec post_signin({:ok | :error, Auth.Domain.t()}) :: {:ok | :error, Auth.Domain.t()}
  def post_signin({:ok, %Auth.Domain{user: %User{} = u} = auth}) do
    Logger.info("Signin", status: auth.status, uid: u.id)
    # TODO: events/triggers to table/signin count, etc
    {:ok, auth}
  end

  def post_signin(pass = {:error, %Auth.Domain{}}), do: pass

  # DRY
  def create_user(<<handle::binary>>, <<eaddr::binary>>, <<hostname::binary>>, type, input \\ %{})
      when is_atom(type) do
    User.Lib.Signup.signup(
      %Auth.Domain{
        hostname: hostname,
        input:
          Map.merge(input, %{
            handle: handle,
            email: %{address: eaddr, verified: false}
          })
      },
      type
    )
  end
end