API Reference Aicacia Handler v0.1.1

Modules

defmodule TestError do
  defexception [:message]
end

defmodule TestHandler do
  use Aicacia.Handler

  schema "" do
    field(:name, :string)
    field(:age, :integer, default: 18)
    field(:fail, :boolean, default: false)
  end

  def changeset(%{} = attrs) do
    %TestHandler{}
    |> cast(attrs, [:name, :age, :fail])
    |> validate_required([:name])
  end

  def handle(%{} = command) do
    if command.fail do
      {:error, %TestError{message: "fail"}}
    else
      {:ok, %{name: command.name, age: command.age}}
    end
  end
end
%{name: "Bob", age: 18} = TestHandler.new!(%{name: "Bob"}) |> TestHandler.handle!()

command = TestHandler.new!(%{name: "Bob", fail: true})

assert_raise(TestError, fn ->
  TestHandler.handle!(command)
end)

{:error, _changeset} = TestHandler.new(%{})