NeahNew/LEANTIME_API_FIXES.md
2026-01-06 18:37:19 +01:00

4.2 KiB

Leantime API Fixes - Mark Notifications as Read

Date: 2026-01-01
Issue: Mark all as read failing due to incorrect API method names
Status: Fixed


🔍 Issues Found

Issue 1: Incorrect Method Name for Single Notification

Current Code (WRONG):

method: 'leantime.rpc.Notifications.Notifications.markNotificationAsRead'
params: {
  userId: leantimeUserId,
  notificationId: parseInt(sourceId)  // Wrong parameter name
}

Leantime Documentation (CORRECT):

method: 'leantime.rpc.Notifications.Notifications.markNotificationRead'  // No "As" in method name
params: {
  id: parseInt(sourceId),  // Parameter is "id", not "notificationId"
  userId: leantimeUserId
}

Fix Applied: Changed method name and parameter names to match Leantime API


Issue 2: No "Mark All" Method Exists

Problem:

  • Leantime API does NOT have a markAllNotificationsAsRead method
  • Current code tries to call a non-existent method

Solution:

  • Fetch all unread notifications
  • Mark each one individually using markNotificationRead
  • Process in parallel for better performance

Fix Applied: Implemented loop-based approach to mark all notifications individually


Changes Made

1. Fixed markAsRead Method

File: lib/services/notifications/leantime-adapter.ts

Changes:

  • Method name: markNotificationAsReadmarkNotificationRead
  • Parameter: notificationIdid
  • Parameter order: id first, then userId (matching Leantime docs)
  • Added request logging

2. Fixed markAllAsRead Method

File: lib/services/notifications/leantime-adapter.ts

New Implementation:

  1. Fetch all unread notifications (up to 1000)
  2. Filter to get only unread ones
  3. Mark each notification individually using markNotificationRead
  4. Process in parallel using Promise.all()
  5. Return success if majority succeed

Benefits:

  • Works with actual Leantime API
  • Handles partial failures gracefully
  • Parallel processing for better performance
  • Detailed logging for each notification

📊 Expected Behavior After Fix

Mark Single Notification as Read

Before: Failed (wrong method name)
After: Should work correctly

Logs:

[LEANTIME_ADAPTER] markAsRead - Request body: {"method":"markNotificationRead",...}
[LEANTIME_ADAPTER] markAsRead - Success: true

Mark All Notifications as Read

Before: Failed (method doesn't exist)
After: Should work (marks each individually)

Logs:

[LEANTIME_ADAPTER] markAllAsRead - Fetching all unread notifications
[LEANTIME_ADAPTER] markAllAsRead - Found 66 unread notifications to mark
[LEANTIME_ADAPTER] markAllAsRead - Results: 66 succeeded, 0 failed out of 66 total
[LEANTIME_ADAPTER] markAllAsRead - Overall success: true

🎯 Count vs Display Issue

Current Situation:

  • Count: 66 unread (from first 100 notifications)
  • Display: 10 notifications shown (pagination)

Why:

  • getNotificationCount() fetches first 100 notifications and counts unread
  • getNotifications() with default limit=20 shows first 10-20
  • This is expected behavior but can be confusing

Options:

  1. Accept limitation: Document that count is based on first 100
  2. Fetch all for count: More accurate but slower
  3. Use dedicated count API: If Leantime provides one
  4. Show "66+ unread": If count reaches 100, indicate there may be more

Recommendation: Keep current behavior but add a note in UI if count = 100 (may have more)


🚀 Next Steps

  1. Test Mark Single as Read: Should work now with correct method name
  2. Test Mark All as Read: Should work by marking each individually
  3. Verify Count Updates: After marking, count should decrease
  4. Monitor Performance: Marking 66 notifications individually may take a few seconds

📝 Summary

Fixes Applied:

  1. Fixed markAsRead method name and parameters
  2. Implemented markAllAsRead using individual marking approach
  3. Added comprehensive logging

Status: Ready for testing after rm -rf .next && npm run build

Expected Result: Mark all as read should now work correctly


Generated: 2026-01-01