tududi/backend/models
Chris 11cd77bedd
Fix Telegram notification spam with channel-level rate limiting (#951)
* Fix Telegram notification spam with channel-level rate limiting

Addresses issue #950 where Telegram notifications were sent excessively
(96-288 messages per day per task) due to the delete-and-recreate pattern
added in commit 105a913a to fix navbar notification pile-up.

Changes:
- Add channel_sent_at JSON field to notifications table to track when
  each channel (telegram, email, push) was last sent
- Add helper methods to notification model:
  - markChannelAsSent(channel): Records send timestamp
  - wasChannelRecentlySent(channel, threshold): Checks if sent within 24h
- Modify sendTelegramNotification() to check rate limit before sending
- Update service layer (dueTaskService, deferredTaskService,
  dueProjectService) to preserve channel_sent_at when recreating
  notifications
- Add comprehensive unit and integration tests (20 tests, all passing)

Impact:
- Reduces Telegram notifications from 96-288/day to 1/day per item
- Preserves in-app notification refresh behavior (every 5-15 min)
- Maintains navbar pile-up fix from original commit
- Rate limit configurable (default: 24 hours)

Fixes #950

* Fix linting and formatting issues

* Fix integration test that was trying to access private function

* Fix prettier formatting in integration test
2026-03-19 20:26:11 +02:00
..
action.js chore(lint): remove unnecessary try/catch and tighten error handling 2025-09-22 15:20:46 +03:00
api_token.js API Access (#495) 2025-11-07 15:19:30 +02:00
area.js Standardize UID implementation across backend 2025-08-06 15:54:45 +03:00
backup.js Feat backups (#686) 2025-12-09 08:00:46 +02:00
calendar_token.js Standardize UID implementation across backend 2025-08-06 15:54:45 +03:00
inbox_item.js Feat add inbox flow (#676) 2025-12-08 09:21:35 +02:00
index.js Fix bug 366 (#764) 2026-01-07 18:18:07 +02:00
note.js Notes page revamp! (#487) 2025-11-06 17:59:30 +02:00
notification.js Fix Telegram notification spam with channel-level rate limiting (#951) 2026-03-19 20:26:11 +02:00
permission.js chore(lint): remove unnecessary try/catch and tighten error handling 2025-09-22 15:20:46 +03:00
project.js Fix bug 722 (#737) 2025-12-28 07:51:15 +02:00
recurringCompletion.js Fix recurring structure (#646) 2025-12-04 13:29:37 +02:00
role.js chore(lint): remove unnecessary try/catch and tighten error handling 2025-09-22 15:20:46 +03:00
setting.js Scaffold smtp service (#590) 2025-11-24 17:58:09 +02:00
tag.js Fix tags deletion (#447) 2025-10-23 23:28:56 +03:00
task.js Fix bug 366 (#764) 2026-01-07 18:18:07 +02:00
task_attachment.js Add file attacmhments 2025-12-07 14:12:38 +02:00
task_event.js Fix bump issues (#651) 2025-12-04 18:19:40 +02:00
user.js Fix isEmail validation failure on valid emails during Docker setup (#835) 2026-02-11 15:42:11 +02:00
view.js Reorder elements (#687) 2025-12-09 10:51:51 +02:00