# `PhoenixAI.Store.Adapter.EventStore`
[🔗](https://github.com/franciscpd/phoenix-ai-store/blob/v0.1.0/lib/phoenix_ai/store/adapter.ex#L91)

Sub-behaviour for adapters that support the append-only event log.
No update or delete callbacks — events are immutable once written.

## Audit trail preservation

Events are intentionally NOT deleted when a conversation is deleted.
The event log is an audit trail that persists beyond the lifecycle of
individual conversations. This is by design — if a conversation is
soft-deleted or hard-deleted, its associated events remain queryable
for compliance, debugging, and cost attribution purposes.

# `count_events`

```elixir
@callback count_events(
  filters :: keyword(),
  keyword()
) :: {:ok, non_neg_integer()}
```

# `list_events`

```elixir
@callback list_events(
  filters :: keyword(),
  keyword()
) ::
  {:ok,
   %{
     events: [PhoenixAI.Store.EventLog.Event.t()],
     next_cursor: String.t() | nil
   }}
```

# `log_event`

```elixir
@callback log_event(
  PhoenixAI.Store.EventLog.Event.t(),
  keyword()
) :: {:ok, PhoenixAI.Store.EventLog.Event.t()} | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
