defmodule Bbox.Peers do
@moduledoc """
Peers module.
"""
alias Bbox.Repo
alias Bbox.Peers.Peer
@doc """
Create a new peer.
"""
@spec insert(map()) :: {:ok, %Peer{}}
def insert(params) do
case Repo.get_by(Peer, address: params.address) do
nil ->
{:ok, peer} =
%Peer{}
|> Peer.changeset(params)
|> Repo.insert()
:telemetry.execute([:bbox, :peers, :insert!], %{peer: peer})
{:ok, peer}
_ ->
{:ok, "peer already exists"}
end
end
@doc """
List all peers.
"""
@spec list!() :: [%Peer{}]
def list!() do
peers =
Peer
|> Repo.all()
:telemetry.execute([:bbox, :peers, :list!], %{peers: peers})
peers
end
end