lib/bbox/parties.ex

defmodule Bbox.Parties do
  @moduledoc """
  Parties module.
  """
  alias Bbox.Repo

  alias Bbox.Parties.Party

  @doc """
  Create a new party.
  """
  @spec insert(map()) :: {:ok, %Party{}}
  def insert(params \\ %{}) do
    {:ok, party} =
      %Party{}
      |> Party.changeset(params)
      |> Repo.insert()

    :telemetry.execute([:bbox, :parties, :insert!], %{party: party})

    {:ok, party}
  end

  @doc """
  List all parties.
  """
  @spec list!() :: [%Party{}]
  def list!() do
    parties =
      Party
      |> Repo.all()

    :telemetry.execute([:bbox, :parties, :list!], %{parties: parties})

    parties
  end

  @doc """
  Get party by initials.
  """
  @spec get_by_initials!(charlist()) :: %Party{}
  def get_by_initials!(initials) do
    Party
    |> Repo.get_by!(initials: initials)
  end
end