feat(api): item dependency extraction, indexing, and resolve endpoints #151

Merged
forbes merged 2 commits from feat/kc-dependencies into main 2026-02-19 00:55:57 +00:00
Owner

Summary

Extract silo/dependencies.json from .kc files on commit and index into the item_dependencies table. Two new API endpoints let clients query raw dependencies and resolve UUIDs to part numbers + file availability.

New files

  • internal/kc/kc.goDependency type + extraction from ZIP
  • internal/db/item_dependencies.go — Repository with ReplaceForRevision, ListByItem, Resolve
  • internal/api/dependency_handlers.goHandleGetDependencies, HandleResolveDependencies

Modified files

  • internal/api/handlers.go — Add deps field to Server struct
  • internal/api/metadata_handlers.go — Index dependencies in extractKCMetadata + SSE broadcast
  • internal/api/pack_handlers.go — Pack real dependency data on checkout + deref helpers
  • internal/api/routes.go — Register GET /dependencies and GET /dependencies/resolve
  • internal/kc/pack_test.go — Update to use typed []Dependency

Endpoints

Method Path Auth Description
GET /api/items/{partNumber}/dependencies viewer Raw dependency list
GET /api/items/{partNumber}/dependencies/resolve viewer UUIDs resolved to part numbers + file status

Design decisions

  • Replace-on-commit: Each .kc commit deletes old deps and inserts fresh ones
  • Resolve is read-time JOIN: LEFT JOIN at query time against items table
  • File availability: Checked per-row via storage.Exists() in the handler

Closes #143
Depends on: PR #149 (Phase 1), PR #150 (Phase 2)

## Summary Extract `silo/dependencies.json` from .kc files on commit and index into the `item_dependencies` table. Two new API endpoints let clients query raw dependencies and resolve UUIDs to part numbers + file availability. ### New files - `internal/kc/kc.go` — `Dependency` type + extraction from ZIP - `internal/db/item_dependencies.go` — Repository with `ReplaceForRevision`, `ListByItem`, `Resolve` - `internal/api/dependency_handlers.go` — `HandleGetDependencies`, `HandleResolveDependencies` ### Modified files - `internal/api/handlers.go` — Add `deps` field to Server struct - `internal/api/metadata_handlers.go` — Index dependencies in `extractKCMetadata` + SSE broadcast - `internal/api/pack_handlers.go` — Pack real dependency data on checkout + deref helpers - `internal/api/routes.go` — Register `GET /dependencies` and `GET /dependencies/resolve` - `internal/kc/pack_test.go` — Update to use typed `[]Dependency` ### Endpoints | Method | Path | Auth | Description | |--------|------|------|-------------| | GET | `/api/items/{partNumber}/dependencies` | viewer | Raw dependency list | | GET | `/api/items/{partNumber}/dependencies/resolve` | viewer | UUIDs resolved to part numbers + file status | ### Design decisions - **Replace-on-commit**: Each .kc commit deletes old deps and inserts fresh ones - **Resolve is read-time JOIN**: LEFT JOIN at query time against items table - **File availability**: Checked per-row via `storage.Exists()` in the handler Closes #143 Depends on: PR #149 (Phase 1), PR #150 (Phase 2)
forbes added 1 commit 2026-02-19 00:54:00 +00:00
- Add Dependency type to internal/kc and extract silo/dependencies.json
  from .kc files on commit
- Create ItemDependencyRepository with ReplaceForRevision, ListByItem,
  and Resolve (LEFT JOIN against items table)
- Add GET /{partNumber}/dependencies and
  GET /{partNumber}/dependencies/resolve endpoints
- Index dependencies in extractKCMetadata with SSE broadcast
- Pack real dependency data into .kc files on checkout
- Update PackInput.Dependencies from []any to []Dependency

Closes #143
forbes added 1 commit 2026-02-19 00:55:45 +00:00
forbes merged commit 98be1fa78c into main 2026-02-19 00:55:57 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/silo#151