stackernews / stacker.news

Internet communities that pay you Bitcoin
https://stacker.news
MIT License
404 stars 105 forks source link

honor mutes when sending push notifications #1145

Closed SatsAllDay closed 1 month ago

SatsAllDay commented 2 months ago

Description

Closes #717

This PR updates the push notification code paths to ensure that user-configured mutes are checked before sending push notifications, if applicable. The following code paths were updated:

This PR also updates the API validation to disallow users from muting and subscribing to the same user - only one or the other is allowed. No migration is performed, so if any user got themselves into this state, they can keep it until they change it. Then they can't go back.

In order to explain this behavior to users, I updated the UI code that toggles subscriptions/mutes to show the error message from the API request in the error toast, instead of a generic "Failed to <mute|subscribe>" message.

Screenshots

N/A

Additional Context

N/A

Checklist

Are your changes backwards compatible? Please answer below: Yes. No database changes or migrations. The only notable change is that users will no longer be able to mute and subscribe to the same user. However, if they've already done that, it will still be honored. They just can't re-configure such a thing.

Did you QA this? Could we deploy this straight to production? Please answer below: Yes.

For frontend changes: Tested on mobile? Please answer below: N/A

Did you introduce any new environment variables? If so, call them out explicitly here: No.

coderabbitai[bot] commented 1 month ago
Walkthrough ## Walkthrough The recent updates aim to improve the notification system by enhancing mute functionality across various components. Changes involve passing structured data for notification functions, consolidating mute logic in a shared library, and enhancing error handling in UI components. These modifications ensure consistent respect for user muting preferences throughout the application. ## Changes | Files | Summary of Changes | |-------|--------------------| | `api/resolvers/item.js` | Updated `createMentions` function to pass structured data for `notifyMention` function. | | `api/resolvers/user.js` | Added `isMuted` import and implemented mute checks in various functions. | | `components/mute.js` | Enhanced error handling for muting/unmuting operations. | | `components/subscribeUser.js` | Improved error message handling for subscribing/unsubscribing users. | | `lib/user.js` | Introduced `isMuted` function to check if a user is muted. | | `lib/webPush.js` | Modified `notifyUserSubscribers` to exclude muted users and updated `notifyMention` for mute checks. | ## Assessment against linked issues | Objective | Addressed | Explanation | |-----------|-----------|-------------| | Respect mutes all for push notifications (#717) | ✅ | The changes, especially the introduction of `isMuted` function and its integration in relevant functions, ensure that mute preferences are respected for all push notifications, extending beyond just replies as per the objective. |

Recent Review Details **Configuration used: CodeRabbit UI** **Review profile: CHILL**
Commits Files that changed from the base of the PR and between 46318fe11767134444f97a8d0198549b15aa6360 and cc725c6911c16e52a2125dd1ebb1dfede0e0b5ed.
Files ignored due to path filters (1) * `awards.csv` is excluded by `!**/*.csv`, `!**/*.csv`
Files selected for processing (1) * api/resolvers/item.js (1 hunks)
Additional comments not posted (1)
api/resolvers/item.js (1)
`1234-1234`: LGTM! The change enhances the context passed to `notifyMention`, aligning with the PR's objectives. Consider the performance impact of DB calls for each mentioned user as noted in previous discussions.
--- Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.