After a bit of research on some libraries that offer such functionalities and
implementation details that we could potentially use for this:
### 1. [notifications-rails](https://github.com/jonhue/notifications-rails)
`notifications-rails` provides a modular structure for creating, rendering,
pushing, and managing settings for notifications, with each module backed by
the database. This setup supports on-site notifications with user-configurable
preferences, allowing users to see unread counts and mark notifications as read.
**Database Structure and Requirements:**
- **New Tables:**
- **`notifications`:** Main table storing each notification. Key columns:
- `target_id` and `target_type` (polymorphic association for the recipient)
- `object_id` and `object_type` (polymorphic link to the notification’s
subject, e.g., a `Comment`)
- `metadata` (JSON for additional data), `category` (notification type),
and `read` (boolean for read/unread).
- **`notification_groups` (optional):** Allows bulk notifications for groups
(e.g., subscribers).
- **Modified Tables:**
- **User Table**: Adds optional columns for `read_notification_count` and
`unread_notification_count` to cache unread counts, and `settings` for storing
user-specific notification preferences.
- **Indexes:**
- Indexes on `target_id`, `target_type`, and `category` for quick lookups in
the `notifications` table.
**Database Workflow:**
1. **Creating Notifications:** Notifications are inserted into `notifications`
with details on target, subject, metadata, and category.
2. **Marking as Read:** Updating `read` marks notifications as read, and
`unread_notification_count` can be adjusted for caching.
3. **Bulk Notifications:** The `notification_groups` table can manage batch
notifications by defining recipient groups.
### 2. [noticed](https://github.com/excid3/noticed)
`noticed` offers individual and bulk notifications, supporting multiple
delivery methods, such as ActionCable for real-time updates. It’s suitable for
creating on-site notifications tied to specific events, each managed through
ActiveJob for asynchronous processing.
**Database Structure and Requirements:**
- **New Tables:**
- **`notified_events`:** Logs each event that triggers notifications. Key
columns:
- `type` (event type, e.g., “NewCommentNotifier”)
- `record_id` and `record_type` (polymorphic association to link with the
event’s subject, e.g., `Post`)
- `params` (JSON to store event details, like message and URL).
- **`notifications`:** Links notifications to events and tracks each
recipient. Key columns:
- `event_id` (foreign key to `notified_events`), `recipient_id` and
`recipient_type` (polymorphic association for the recipient), and `read_at`
(datetime for read status).
- **Modified Tables:**
- **User Table**: No required modifications, but adding `has_many
:notifications` makes it easier to manage notifications.
- **Indexes:**
- Indexes on `type`, `record_type`, and `record_id` in `notified_events` for
efficient filtering and quick retrieval.
**Database Workflow:**
1. **Logging Events:** Each new event (e.g., a comment) is logged in
`notified_events`, capturing relevant metadata.
2. **Creating Notifications:** Notifications are linked to events in
`notifications`, enabling individual tracking for each recipient.
3. **Read Status:** Users mark notifications as read by updating `read_at`,
enabling quick querying for unread notifications and visual badges.
Hope you find this helpful @gravitystorm
--
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/issues/1387#issuecomment-2443324208
You are receiving this because you are subscribed to this thread.
Message ID:
<openstreetmap/openstreetmap-website/issues/1387/2443324...@github.com>
_______________________________________________
rails-dev mailing list
rails-dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/rails-dev