feat(server): add comment CRUD endpoints and issue filter/update enhancements

- Add UpdateComment and DeleteComment handlers with /api/comments/{commentId} routes
- Add broadcast for comment create/update/delete WebSocket events
- Support status, priority, and assignee_id filters on ListIssues
- Extend UpdateIssue to handle due_date, acceptance_criteria, context_refs, repository
- Properly distinguish "field not sent" vs "field sent as null" in UpdateIssue
- Add corresponding SDK methods and TypeScript types

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Naiyuan Qing 2026-03-23 20:05:38 +08:00
parent fff7753a0c
commit cc2281416e
8 changed files with 237 additions and 27 deletions

View file

@ -1,6 +1,9 @@
-- name: ListIssues :many
SELECT * FROM issue
WHERE workspace_id = $1
AND (sqlc.narg('status')::text IS NULL OR status = sqlc.narg('status'))
AND (sqlc.narg('priority')::text IS NULL OR priority = sqlc.narg('priority'))
AND (sqlc.narg('assignee_id')::uuid IS NULL OR assignee_id = sqlc.narg('assignee_id'))
ORDER BY position ASC, created_at DESC
LIMIT $2 OFFSET $3;
@ -27,6 +30,10 @@ UPDATE issue SET
assignee_type = sqlc.narg('assignee_type'),
assignee_id = sqlc.narg('assignee_id'),
position = COALESCE(sqlc.narg('position'), position),
due_date = sqlc.narg('due_date'),
acceptance_criteria = COALESCE(sqlc.narg('acceptance_criteria'), acceptance_criteria),
context_refs = COALESCE(sqlc.narg('context_refs'), context_refs),
repository = COALESCE(sqlc.narg('repository'), repository),
updated_at = now()
WHERE id = $1
RETURNING *;