feat: track notification read receipts per user

- New notification_reads table (migration 008) with unique (notification_id, user_id)
- Notification model: markAsRead inserts into notification_reads; getForUser JOINs
  to show per-user read status; getUnreadCount checks NOT EXISTS in reads table
- getAll() includes read_count subquery for admin view
- Admin view shows 'X / Y' read count for broadcast notifications,
  'Read'/'Unread' badge for user-targeted ones
- Migrates existing read notifications into notification_reads
- AGENTS.md updated with new conventions
This commit is contained in:
2026-06-13 11:48:05 -04:00
parent b94ae16f69
commit 12c3e23d9c
6 changed files with 106 additions and 14 deletions

View File

@@ -1008,6 +1008,7 @@ textarea.form-input {
.badge-warning { background: var(--warning-bg); color: var(--warning); }
.badge-info { background: var(--info-bg); color: var(--info); }
.badge-purple { background: var(--purple-bg); color: var(--purple); }
.badge-secondary { background: rgba(156, 163, 175, 0.15); color: #9ca3af; }
/* ==========================================================================
Mini Progress