- Add missing notifications for priority_changed and due_date_changed events - Publish priority_changed and due_date_changed flags from UpdateIssue handler - Add details JSONB column to inbox_item (migration 019) for structured change data - Store from/to values in details for status, priority, assignee, and due_date changes - Notification titles now use plain issue title; details carry structured context - Add human-readable label maps (statusLabels, priorityLabels) in notification listeners - Update inbox handler responses to include details field - Frontend: InboxDetailLabel renders rich subtitles per notification type - Status: "Set status to ● In Progress" with StatusIcon - Priority: "Set priority to ◆ High" with PriorityIcon - Assigned: "Assigned to Bob" with resolved actor name - Due date: "Set due date to Apr 20" - Comment: truncated comment body preview - Frontend: HoverCard on inbox items shows issue title + description context - Add due_date_changed to InboxItemType and typeLabels - Add tests for priority_changed and due_date_changed notifications Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
51 lines
1.6 KiB
SQL
51 lines
1.6 KiB
SQL
-- name: ListInboxItems :many
|
|
SELECT i.*,
|
|
iss.status as issue_status
|
|
FROM inbox_item i
|
|
LEFT JOIN issue iss ON iss.id = i.issue_id
|
|
WHERE i.recipient_type = $1 AND i.recipient_id = $2 AND i.archived = false
|
|
ORDER BY i.created_at DESC
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: GetInboxItem :one
|
|
SELECT * FROM inbox_item
|
|
WHERE id = $1;
|
|
|
|
-- name: CreateInboxItem :one
|
|
INSERT INTO inbox_item (
|
|
workspace_id, recipient_type, recipient_id,
|
|
type, severity, issue_id, title, body,
|
|
actor_type, actor_id, details
|
|
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
|
|
RETURNING *;
|
|
|
|
-- name: MarkInboxRead :one
|
|
UPDATE inbox_item SET read = true
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: ArchiveInboxItem :one
|
|
UPDATE inbox_item SET archived = true
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: CountUnreadInbox :one
|
|
SELECT count(*) FROM inbox_item
|
|
WHERE recipient_type = $1 AND recipient_id = $2 AND read = false AND archived = false;
|
|
|
|
-- name: MarkAllInboxRead :execrows
|
|
UPDATE inbox_item SET read = true
|
|
WHERE recipient_type = 'member' AND recipient_id = $1 AND archived = false AND read = false;
|
|
|
|
-- name: ArchiveAllInbox :execrows
|
|
UPDATE inbox_item SET archived = true
|
|
WHERE recipient_type = 'member' AND recipient_id = $1 AND archived = false;
|
|
|
|
-- name: ArchiveAllReadInbox :execrows
|
|
UPDATE inbox_item SET archived = true
|
|
WHERE recipient_type = 'member' AND recipient_id = $1 AND read = true AND archived = false;
|
|
|
|
-- name: ArchiveCompletedInbox :execrows
|
|
UPDATE inbox_item SET archived = true
|
|
WHERE recipient_type = 'member' AND recipient_id = $1 AND archived = false
|
|
AND issue_id IN (SELECT id FROM issue WHERE status IN ('done', 'cancelled'));
|