feat(rest): FastAPI adapter + /jobs /healthz /metrics (spec 5) #21
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/rest-adapter"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
REST routes: POST /jobs (201/200 idempotent), GET /jobs/{id}, GET /jobs?client_id&request_id, GET /healthz (3-probe + 2s pg timeout), GET /metrics (24h counters).
create_app(spawn_worker=bool) makes worker spawning opt-out; probes are DI-d for test injection.
9 integration tests pass locally; unit suite still 209. Forgejo Actions trigger is flaky; local verification is the gate.
Routes: - POST /jobs: 201 on first insert, 200 on idempotent re-submit. - GET /jobs/{id}: full Job envelope or 404. - GET /jobs?client_id=&request_id=: correlation lookup or 404. - GET /healthz: {postgres, ollama, ocr}; 200 iff all ok (degraded counts as non-200 per spec). Postgres probe guarded by a 2 s wait_for. - GET /metrics: pending/running counts + 24h done/error counters + per-use-case avg seconds. Plain JSON, no Prometheus. create_app(spawn_worker=bool) parameterises worker spawning so tests that only need REST pass False. Worker spawn is tolerant of the loop module not being importable yet (Task 3.5 fills it in). Probes are a DI bundle — production wiring swaps them in at startup (Chunk 4); tests inject canned ok/fail callables. Session factory is also DI'd so tests can point at a per-loop engine and sidestep the async-pg cross-loop future issue that bit the jobs_repo fixture. 9 new integration tests; unit suite unchanged. Forgejo Actions trigger is flaky; local verification is the gate (unit + integration green locally). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>