# 0.9.1
- Add set_state optional callback to Aggregate
- Add documentation.
# 0.9.0
- Breaking change in telemetry events from dispatcher and router
# 0.8.6
- Fix dialyzer error for `:ensure_local_logging?`
- Change local logging to be turned on by default
# 0.8.5
- Fix typo in raised ArgumentError if passed `:ensure_local_logging?` value is
not `boolean()`
- Refactor internal function to eliminate dialyzer error from client apps
# 0.8.4
- Bump elixir to 1.11
- Fix return types in spec for `Router.authorize/1`
- Update deps
- Clean unused deps
- Add optional `:ensure_local_logging?` config option when defining a Router to
limit each node log output to its own STDOUT
- If passed as `true` ensures log messages of called node are not shown in
caller node STDOUT
- If not passed defaults to `false`
# 0.8.3
- Logger.warn -> Logger.warning
# 0.8.2
- Add `Dispatcher.validate/1` function that will set `Message.dry_run` to `true` if it was `false`.
- Add optional `Aggregate.rollback/2` callback that is invoked if message was dry run.
- Add optional `Aggregate.commit/2` callback that is invoked if message wasn't dry run.
# 0.8.1
- Router calls `authorize/1` callback before it proceeds with service call.
BREAKING CHANGE: by default `authorize/1` returns `:forbidden`.
- Add `Dispatcher.authorized?/1`
# 0.7.20
- Dispatcher creates temp proc when invoking local service (to avoid refc binary leaks)
# 0.7.19
- No need for catch-all function when unloading aggregate on state
# 0.7.18
- Add unload aggregate on it's state (after applying events) using MessageHandler macro option:
```
use X3m.System.MessageHandler,
unload_aggregate_on: %{
state: &__MODULE__.unload_on_state/1
}
def unload_on_state(%ClientState{status: :completed}), do: :unload
def unload_on_state(%ClientState{status: :almost_completed}), do: {:in, :timer.hours(1)}
def unload_on_state(%ClientState{}), do: :skip
```
# 0.7.17
- Add unload aggregate on event using MessageHandler macro option:
```
use X3m.System.MessageHandler,
unload_aggregate_on: %{
events: %{
Event.Example => {:in, :timer.hours(1)}
}
}
```
# 0.7.16
- `execute_on_new_aggregate` returns `{:ok, -1}` if aggregate returns `:ok` response
with empty `events`
# 0.7.15
- Add `on_maybe_new_aggregate/2` in .formatter
# 0.7.14
- Add `on_maybe_new_aggregate/2` macro for MessageHandler.
# 0.7.13
- Service router doesn't remove `events` from `Message` if `dry_run` was set to `:verbose`
# 0.7.9
- Add and maintain `dispatch_attempts` in SysMsg for scheduler
# 0.7.5
- Introduce servicep/2 macro for router.
# 0.7.2
- Fix warnings in elixir 1.11
# 0.7.1
- Service router removes `request` and `events` from `Message` when sending response back to invoker.