lib/bbox/peers/peer.ex
defmodule Bbox.Peers.Peer do
@moduledoc """
Node of the network.
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key false
@foreign_key_type :string
schema "peers" do
field(:address, :string)
timestamps()
end
def changeset(peer, params \\ %{}) do
peer
|> cast(params, [:address])
|> validate_required([:address])
|> validate_format(:address, ~r/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}$/,
message: "invalid address"
)
|> unique_constraint(:address, message: "address already exists")
end
end