# `PhoenixKit.Modules.Storage.EtcherAdapter`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.164/lib/modules/storage/etcher_adapter.ex#L1)

Persistence helper for the MediaBrowser's annotation flow.

Etcher 0.3 dropped the `Etcher.Storage` behaviour entirely — annotations
now live inside the host `<Fresco.canvas>`'s `extensions.etcher` blob
and the library doesn't reach into the consumer's DB anymore. PhoenixKit
still needs to persist its annotations (they're per-file, not per-canvas-
file-on-disk), so this module survives as a thin helper module called
from the MediaBrowser LV's `etcher:annotations-changed` event handler —
not as a behaviour implementation.

The four public functions (`create/1`, `list_for/2`, `update/2`,
`delete/1`) keep their pre-0.3 signatures so the diff in MediaBrowser
stays small. None of them are `@impl` annotations anymore; they're
just plain helpers wrapping the `PhoenixKit.Annotations` context.

Etcher's generic API is keyed by `target_type` + `target_uuid` so the
library can annotate any kind of resource. In PhoenixKit the only
target is a media File, so this adapter requires `target_type ==
"file"` and maps `target_uuid` to `file_uuid`.

## Comment threads

An annotation's discussion thread is **not** created at draw time —
it's instantiated lazily when the user posts the first comment on the
annotation. The comments are anchored to the **file**
(`resource_type = "file"`, `resource_uuid = file_uuid`) with
`metadata.annotation_uuid` carrying the back-reference, so they
appear in the file's main thread alongside non-annotated discussion.
No `comment_uuid` column on annotations is needed.

# `create`

# `delete`

# `list_for`

# `update`

---

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