# Module: Annotations service ## Purpose Core **annotation CRUD**, listing, static image/thumbnail delivery, and coordination with **media** and **files on disk**. Maps to **`01_annotations.md` §1–6** (not SSE — see `sse-realtime.md`). ## Code - `AnnotationService` — create/update/status/delete/query/get one; uses `PathResolver`, hashing, label/thumbnail generation, queue handoff to failsafe path as implemented. - `AnnotationsController` — `[Route("annotations")]`, `[Authorize(Policy = "ANN")]` except where noted. - REST: `POST`, `PUT/{id}`, `PATCH/{id}/status`, `DELETE/{id}`, `GET`, `GET/{id}`. - Files: `GET/{id}/thumbnail`, `GET/{id}/image`. - **SSE** `GET/events` documented in `sse-realtime.md` (same controller type). ## DTOs (this module) - `CreateAnnotationRequest`, `UpdateAnnotationRequest`, `UpdateStatusRequest`, `GetAnnotationsQuery`, `AnnotationListItem`, `DetectionDto` (annotation payloads). ## Dependencies Database, `PathResolver`, optional integration with queue/SSE services. ## Suite vs code (maintain in suite or code) - **UserId:** suite pseudo-code shows `UserId` on create; **implementation** uses JWT subject (`AnnotationsController`). - **GET filter:** suite `missionId` vs code `FlightId` + filter behavior — track as open alignment. ## Suite doc §1–6; annotation identity at top of `01_annotations.md`.