farmbot_os/farmbot_core/lib/asset_storage/pin_binding.ex

35 lines
864 B
Elixir

defmodule Farmbot.Asset.PinBinding do
@moduledoc """
When a pin binding is triggered a sequence fires.
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key {:local_id, :binary_id, autogenerate: true}
schema "pin_bindings" do
field(:id, :integer)
field(:pin_num, :integer)
field(:sequence_id, :integer)
field(:special_action, :string)
end
@required_fields [:id, :pin_num]
def changeset(pin_binding, params \\ %{}) do
pin_binding
|> cast(params, @required_fields)
|> validate_required(@required_fields)
|> validate_pin_num()
|> unique_constraint(:id)
|> unique_constraint(:pin_num)
end
def validate_pin_num(changeset) do
if get_field(changeset, :pin_num, -1) in [17, 23, 27, 06, 21, 24, 25, 12, 13] do
add_error(changeset, :pin_num, "in use")
else
changeset
end
end
end