- **fix(sql):** wrap `rows.Close` in a `defer` function to safely handle potential close errors - **fix(api):** handle JSON encoding errors in API responses to prevent unhandled edge cases - **docs:** correct typos and improve phrasing in `.claude/CLAUDE.md` - **test:** add error handling for `UpdateEvent` in test cases
1.6 KiB
1.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Commands
# Run all tests with coverage
go test -v -coverprofile=coverage.out -coverpkg=./... ./...
# Run a single test
go test -v -run TestWebhookHandler ./test/diunwebhook/
# Run the app locally
go run ./cmd/diunwebhook/
# Build Docker image
docker build -t diun-webhook-dashboard .
# Run with Docker Compose
docker compose up -d
CI warns (but does not fail) when coverage drops below 80%.
Architecture
The app is a minimal Go HTTP server that receives DIUN webhook events and exposes them via a JSON API and static HTML dashboard. All states are in-memory (no persistence).
Package layout:
pkg/diunwebhook/— core library:DiunEventstruct, in-memoryupdatesmap (guarded bysync.Mutex), and HTTP handlers (WebhookHandler,UpdatesHandler)cmd/diunwebhook/main.go— wires the handlers and static file server ontonet/http's default mux, listens on:8080test/diunwebhook/— external test package (package diunwebhook_test) that importspkg/diunwebhook; useshttptestfor handler testsstatic/— served verbatim at/
Key data flow:
- DIUN POSTs JSON to
/webhook→WebhookHandlerdecodes intoDiunEvent→ stored inupdates[event.Image](the latest event per image wins) - Dashboard JS polls
GET /api/updates→UpdatesHandlerreturns a full map as JSON
Test helpers exposed from the library package (not part of the public API, only for tests): GetUpdatesMap(), UpdatesReset(), UpdateEvent().