Packages
cqrs_tools
0.2.22
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.1
0.1.0
A collection of handy Elixir macros for CQRS applications.
Current section
Files
Jump to
Current section
Files
lib/cqrs/command/command_state.ex
defmodule Cqrs.Command.CommandState do
@moduledoc false
alias Ecto.Changeset
@type t :: %__MODULE__{
changeset: Changeset.t(),
errors: list(),
valid?: boolean()
}
defstruct [:changeset, :errors, :valid?]
def new(%Changeset{valid?: valid?} = changeset) do
errors = Changeset.traverse_errors(changeset, fn {err, _opts} -> err end)
%__MODULE__{changeset: changeset, errors: errors, valid?: valid?}
end
def apply(%__MODULE__{changeset: changeset}) do
Changeset.apply_action(changeset, :create)
end
def apply_changes(%__MODULE__{changeset: changeset}) do
Changeset.apply_changes(changeset)
end
def merge(%Changeset{} = new_changes, %__MODULE__{changeset: changeset}) do
changeset
|> Changeset.merge(new_changes)
|> new()
end
defimpl Inspect do
import Inspect.Algebra
def inspect(%{changeset: changeset, errors: errors}, opts) do
%{valid?: valid?, changes: changes, data: %{__struct__: type}} = changeset
changes = Map.delete(changes, :created_at)
[command_type | _] =
type
|> Module.split()
|> Enum.reverse()
if valid?,
do: concat(["##{command_type}<", to_doc(changes, opts), ">"]),
else: concat(["##{command_type}<errors: ", to_doc(errors, opts), ">"])
end
end
end