Implement tags API route #28

Closed
opened 2026-05-19 19:51:45 -05:00 by erik · 2 comments
Owner

Goal

Implement the Slugkit tags API route for listing tag records used by posts.

Spec: docs/specs/03-tags-route.md

Requirements

  • Implement the tags route exactly as documented in the spec.
  • Return tag objects with stable slugs and any documented counts/metadata.
  • Ensure tags created by the posts API are visible through this route.
  • Use shared auth and error handling.
  • Document the route in OpenAPI with the operation ID from the spec.
  • Add tests for empty tags, populated tags, and OpenAPI coverage.

Acceptance criteria

  • Can list tags.
  • Empty tag list returns data: [].
  • Tags created through post operations appear in tag listing.
  • Route uses shared auth/error behavior.
  • Route appears in OpenAPI with the documented operation ID.
  • Relevant lint/test checks pass.

Dependencies

  • task-c272cbda
  • task-69937fe4
## Goal Implement the Slugkit tags API route for listing tag records used by posts. Spec: `docs/specs/03-tags-route.md` ## Requirements - Implement the tags route exactly as documented in the spec. - Return tag objects with stable slugs and any documented counts/metadata. - Ensure tags created by the posts API are visible through this route. - Use shared auth and error handling. - Document the route in OpenAPI with the operation ID from the spec. - Add tests for empty tags, populated tags, and OpenAPI coverage. ## Acceptance criteria - [ ] Can list tags. - [ ] Empty tag list returns `data: []`. - [ ] Tags created through post operations appear in tag listing. - [ ] Route uses shared auth/error behavior. - [ ] Route appears in OpenAPI with the documented operation ID. - [ ] Relevant lint/test checks pass. ## Dependencies - task-c272cbda - task-69937fe4
Author
Owner

Synced from todu comment by @todu on 2026-05-23T03:50:14.513Z

PR Review: Approved

PR: #66

Summary

Reviewed PR #66 at commit 6fb5bc2. The PR adds authenticated GET /api/v1/tags support, a tag listing query with post usage counts, route registration, OpenAPI documentation, and API/OpenAPI tests.

Acceptance Criteria

  • Can list tags — met.
  • Empty tag list returns data: [] — met.
  • Tags created through post operations appear in tag listing — met.
  • Route uses shared auth/error behavior — met.
  • Route appears in OpenAPI with the documented operation ID — met.
  • Relevant lint/test checks pass — met: make check, ./scripts/pre-pr.sh, manual local API smoke, and Forgejo CI passed.

Blocking Issues

None.

Warnings

None.

Verdict

Approved for merge after explicit human approval.

_Synced from todu comment by @todu on 2026-05-23T03:50:14.513Z_ ## PR Review: Approved PR: https://forge.caradoc.com/erik/slugkit/pulls/66 ### Summary Reviewed PR #66 at commit `6fb5bc2`. The PR adds authenticated `GET /api/v1/tags` support, a tag listing query with post usage counts, route registration, OpenAPI documentation, and API/OpenAPI tests. ### Acceptance Criteria - [x] Can list tags — met. - [x] Empty tag list returns `data: []` — met. - [x] Tags created through post operations appear in tag listing — met. - [x] Route uses shared auth/error behavior — met. - [x] Route appears in OpenAPI with the documented operation ID — met. - [x] Relevant lint/test checks pass — met: `make check`, `./scripts/pre-pr.sh`, manual local API smoke, and Forgejo CI passed. ### Blocking Issues None. ### Warnings None. ### Verdict Approved for merge after explicit human approval.
erik 2026-05-23 14:35:14 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-05-23T17:48:37.059Z

=== Task Close Gate: Task #task-8fbb8c0c ===

Task: Implement tags API route

Acceptance Criteria:

  • Can list tags — met — PR #66 added authenticated GET /api/v1/tags and merged it into main.
  • Empty tag list returns data: [] — met — API tests cover an authenticated empty tag list response.
  • Tags created through post operations appear in tag listing — met — API tests create and update posts with tagSlugs, then verify the tags list includes them.
  • Route uses shared auth/error behavior — met — route uses shared bearer auth/API key validation; tests verify unauthenticated 401 with operation tags.list.
  • Route appears in OpenAPI with the documented operation ID — met — OpenAPI includes /tags with operation ID tags.list and TagListResponse; route tests assert this.
  • Relevant lint/test checks pass — met — make check, ./scripts/pre-pr.sh, manual local API smoke, and Forgejo CI passed before merge.

Readiness: READY

Closing Summary:
PR #66 was merged into main after explicit human approval. Slugkit now exposes GET /api/v1/tags with bearer auth, stable tag slugs, post usage counts, OpenAPI coverage, and tests.

Next Action: close-task

_Synced from todu comment by @todu on 2026-05-23T17:48:37.059Z_ === Task Close Gate: Task #task-8fbb8c0c === Task: Implement tags API route Acceptance Criteria: - [x] Can list tags — met — PR #66 added authenticated `GET /api/v1/tags` and merged it into `main`. - [x] Empty tag list returns `data: []` — met — API tests cover an authenticated empty tag list response. - [x] Tags created through post operations appear in tag listing — met — API tests create and update posts with `tagSlugs`, then verify the tags list includes them. - [x] Route uses shared auth/error behavior — met — route uses shared bearer auth/API key validation; tests verify unauthenticated `401` with operation `tags.list`. - [x] Route appears in OpenAPI with the documented operation ID — met — OpenAPI includes `/tags` with operation ID `tags.list` and `TagListResponse`; route tests assert this. - [x] Relevant lint/test checks pass — met — `make check`, `./scripts/pre-pr.sh`, manual local API smoke, and Forgejo CI passed before merge. Readiness: READY Closing Summary: PR #66 was merged into `main` after explicit human approval. Slugkit now exposes `GET /api/v1/tags` with bearer auth, stable tag slugs, post usage counts, OpenAPI coverage, and tests. Next Action: close-task
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
erik/slugkit#28
No description provided.