Skip to main content

CHANGELOG.md

# 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.