195 lines
5.7 KiB
Markdown
195 lines
5.7 KiB
Markdown
# Notification Issues - Analysis & Fixes
|
|
|
|
**Date**: 2026-01-01
|
|
**Issues Reported**:
|
|
1. Count shows 66 messages, but only 10 are displayed
|
|
2. "Mark all as read" fails
|
|
3. Count doesn't update after marking as read
|
|
|
|
---
|
|
|
|
## 🔍 Issue Analysis
|
|
|
|
### Issue 1: Count vs Display Discrepancy
|
|
|
|
**Symptom**:
|
|
- Badge shows: **66 unread notifications**
|
|
- Dropdown shows: **Only 10 notifications**
|
|
|
|
**Root Cause**:
|
|
1. **Count Logic**: `getNotificationCount()` calls `getNotifications(userId, 1, 100)` to count
|
|
- Gets first 100 notifications from Leantime
|
|
- Counts unread: 66
|
|
- This is correct for the first 100 notifications
|
|
|
|
2. **Display Logic**: `getNotifications()` is called with `limit: 20` (default)
|
|
- But only 10 are shown (possibly due to pagination or filtering)
|
|
- This is a display/pagination issue
|
|
|
|
**The Problem**:
|
|
- If Leantime has more than 100 notifications total, the count will be inaccurate
|
|
- The count only reflects the first 100 notifications
|
|
- Display shows fewer notifications than the count
|
|
|
|
**Solution**:
|
|
- ✅ Added warning log when count reaches 100 (may have more)
|
|
- ⚠️ Consider using a dedicated count API if Leantime provides one
|
|
- ⚠️ Consider fetching all notifications for accurate count (may be slow)
|
|
|
|
---
|
|
|
|
### Issue 2: Mark All As Read Fails
|
|
|
|
**Symptom**:
|
|
```
|
|
[NOTIFICATION_API] Mark all as read - Failed { userId: '...', duration: '197ms' }
|
|
```
|
|
|
|
**Root Cause**:
|
|
- Leantime API call is failing
|
|
- No detailed error logging to see why
|
|
|
|
**Solution Applied**:
|
|
- ✅ Added comprehensive error logging to `markAllAsRead()`:
|
|
- Logs user email and Leantime user ID
|
|
- Logs request body and API URL
|
|
- Logs response status and body
|
|
- Logs parsed response with error details
|
|
- Logs exceptions with stack traces
|
|
|
|
**Next Steps**:
|
|
1. Test mark-all-as-read again
|
|
2. Check logs for detailed error information
|
|
3. Verify Leantime API method name is correct
|
|
4. Check if Leantime API requires different parameters
|
|
|
|
---
|
|
|
|
## 🔧 Fixes Applied
|
|
|
|
### 1. Enhanced Error Logging in `markAllAsRead`
|
|
|
|
**File**: `lib/services/notifications/leantime-adapter.ts`
|
|
|
|
**Changes**:
|
|
- Added detailed logging at each step
|
|
- Logs request details (body, URL)
|
|
- Logs response details (status, body, parsed data)
|
|
- Logs errors with full context
|
|
- Logs success/failure status
|
|
|
|
**Expected Log Output**:
|
|
```
|
|
[LEANTIME_ADAPTER] markAllAsRead called for ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - User email: ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - Leantime user ID: ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - Request body: {...}
|
|
[LEANTIME_ADAPTER] markAllAsRead - API URL: ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - Response status: 200
|
|
[LEANTIME_ADAPTER] markAllAsRead - Response body: {...}
|
|
[LEANTIME_ADAPTER] markAllAsRead - Parsed response: {...}
|
|
[LEANTIME_ADAPTER] markAllAsRead - Success: true/false
|
|
```
|
|
|
|
---
|
|
|
|
### 2. Enhanced Count Logging
|
|
|
|
**File**: `lib/services/notifications/leantime-adapter.ts`
|
|
|
|
**Changes**:
|
|
- Added warning when count reaches 100 (may have more notifications)
|
|
- Added read count to logging
|
|
- Added note about potential inaccuracy
|
|
|
|
---
|
|
|
|
## 🎯 Next Steps
|
|
|
|
### Immediate Testing
|
|
|
|
1. **Test Mark All As Read**
|
|
- Click "Mark all as read"
|
|
- Check logs for detailed error information
|
|
- Look for `[LEANTIME_ADAPTER] markAllAsRead` entries
|
|
|
|
2. **Verify Count Accuracy**
|
|
- Check if Leantime has more than 100 notifications
|
|
- Verify count matches actual unread notifications
|
|
- Check if count updates after marking as read
|
|
|
|
### Potential Issues to Check
|
|
|
|
1. **Leantime API Method Name**
|
|
- Current: `leantime.rpc.Notifications.Notifications.markAllNotificationsAsRead`
|
|
- Verify this is the correct method name in Leantime API
|
|
|
|
2. **Leantime API Parameters**
|
|
- Current: `{ userId: leantimeUserId }`
|
|
- May need additional parameters
|
|
|
|
3. **Leantime API Response Format**
|
|
- Check if response format matches expected format
|
|
- May need to handle different response structures
|
|
|
|
---
|
|
|
|
## 📊 Expected Behavior After Fixes
|
|
|
|
### Mark All As Read
|
|
|
|
**Success Case**:
|
|
```
|
|
[NOTIFICATION_API] Mark all as read endpoint called
|
|
[NOTIFICATION_API] Mark all as read - Processing { userId: '...', timestamp: '...' }
|
|
[LEANTIME_ADAPTER] markAllAsRead called for ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - Success: true
|
|
[NOTIFICATION_API] Mark all as read - Success { userId: '...', duration: 'Xms' }
|
|
[NOTIFICATION_SERVICE] Invalidated notification caches for user ...
|
|
```
|
|
|
|
**Failure Case** (with detailed error):
|
|
```
|
|
[NOTIFICATION_API] Mark all as read endpoint called
|
|
[LEANTIME_ADAPTER] markAllAsRead called for ...
|
|
[LEANTIME_ADAPTER] markAllAsRead - Response status: 400
|
|
[LEANTIME_ADAPTER] markAllAsRead - Response body: {"error": {...}}
|
|
[LEANTIME_ADAPTER] markAllAsRead - API Error: {...}
|
|
[NOTIFICATION_API] Mark all as read - Failed { userId: '...', duration: 'Xms' }
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Debugging Checklist
|
|
|
|
When testing, check logs for:
|
|
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - User email:` (should show email)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Leantime user ID:` (should show ID)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Request body:` (should show JSON-RPC request)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Response status:` (should be 200 for success)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Response body:` (should show API response)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Parsed response:` (should show result/error)
|
|
- [ ] `[LEANTIME_ADAPTER] markAllAsRead - Success:` (should be true/false)
|
|
|
|
---
|
|
|
|
## 📝 Summary
|
|
|
|
**Fixes Applied**:
|
|
1. ✅ Enhanced error logging in `markAllAsRead`
|
|
2. ✅ Enhanced count logging with warnings
|
|
|
|
**Next Actions**:
|
|
1. Test mark-all-as-read functionality
|
|
2. Review detailed error logs
|
|
3. Fix Leantime API call based on error details
|
|
4. Verify count accuracy
|
|
|
|
**Status**: ⏳ **AWAITING TESTING** - Enhanced logging will reveal the root cause
|
|
|
|
---
|
|
|
|
**Generated**: 2026-01-01
|
|
|