Skip to content

Conversation

Johnetordoff
Copy link
Contributor

@Johnetordoff Johnetordoff commented May 20, 2025

Purpose

This system is designed to formalize and consolidate OSF Notifications under one system in order to better facilitate collaboration between Product, Engineers and QA and end persistent problems with notification email related tech debt. This project is the result of an extensive audit of all OSF emails and combined email digests and seeks to move the NotificationSubscription model out of it's transitional state having been migrated from a document based model, into it's final data model which is more regular for a relation our current relational database (django's postgress db).

In order to do this I have taken @mfraezz design documents and implemented them with minor changes. This means the responsibility for sending notifications in osf.io is shared by three new models, which will have the old data migrated into them via a migration script and management command. The models are:

  • NotificationType

    • Similar to RegistrationSchemas or Waffle flags these are in db instrances which are poulated from static config documents in this case yaml.
    • Since these are synced on migration with notification.yaml a developer will be able to see at a glance if where a notification template is and what it's purpose is.
  • NotificationSubscription

    • This model is somewhat analogous to the earlier EmailDigest model, this holds references to potentially many Notifcations models that can be compiled into a single digest this is sent at a periodic basis.
  • Notification

    • Holds message information and context
    • Unlike earlier implementations this will record each Notification creation and sending for metrics purposes.

Changes

  • Combines worker with beat in docker-compose
  • creates notifications.yaml to contain all notification types info it is populated via postmigrate hook
  • creates new Notification NotificationSubscription and NotificationType
  • adds migrations to rename legacy tables and a managment command to populate the new ones.
  • Deletes old send_mails method and replaces it with emit of NotificationType
  • adds tests and updates old mocking
  • updates views and permission classed
  • A slight change to handle_boa_error to pass the already decanted user object.
  • adds new data model for Notification, NotificationTypes and Subscriptions
  • creates a notifications.yaml for data dependency notificationtypes
  • add migrations
  • updates notifications to use NotificationTypes
  • updates Admin app to control email templates
  • updates metrics reporter to count notifications sent etc.
  • updates tests to all use capture_notifications mocking util
  • Removes queued_mail
  • Removes EmailDigest
  • Removes detect_duplicates for duplicate subscriptions

QA Notes

Please make verification statements inspired by your code and what your code touches.

  • Verify
  • Verify

What are the areas of risk?

Any concerns/considerations/questions that development raised?

Documentation

Side Effects

Ticket

https://openscience.atlassian.net/browse/ENG-8064

@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 4 times, most recently from 3a8b414 to 57b0bd1 Compare May 21, 2025 14:42
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 2b8ba0d to c449599 Compare June 9, 2025 13:40
@Johnetordoff Johnetordoff changed the base branch from feature/pbs-25-10 to refactor-notifications June 13, 2025 14:40
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 3 times, most recently from ad18e9d to 300524c Compare July 3, 2025 14:20
@Johnetordoff Johnetordoff marked this pull request as ready for review July 8, 2025 20:05
@Johnetordoff Johnetordoff force-pushed the refactor-notifications branch from 2dee1b2 to 2dbcbf7 Compare July 10, 2025 15:50
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 4 times, most recently from 9238258 to 37b419a Compare July 10, 2025 20:24
@Johnetordoff Johnetordoff force-pushed the refactor-notifications branch from afc3815 to b6bbeed Compare July 11, 2025 13:02
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 14 times, most recently from 1a4314d to 2894a24 Compare July 18, 2025 14:38
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 2 times, most recently from 7145117 to 4ad8e87 Compare September 3, 2025 20:32
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 4ad8e87 to 02b7adf Compare September 3, 2025 21:20
@@ -108,11 +112,6 @@ class CeleryConfig(defaults.CeleryConfig):

USE_CDN_FOR_CLIENT_LIBS = False

# WARNING: `SENDGRID_WHITELIST_MODE` should always be True in local dev env to prevent unintentional spamming.
# Add specific email addresses to `SENDGRID_EMAIL_WHITELIST` for testing purposes.
SENDGRID_WHITELIST_MODE = True
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mfraezz I checked with another member of the cloud team, but just want to confirm with you this isn't still being used somewhere.

@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 22e2979 to e8f7e1f Compare September 3, 2025 23:56
@receiver(post_save, sender=CollectionProvider)
@receiver(post_save, sender=PreprintProvider)
@receiver(post_save, sender=RegistrationProvider)
def create_provider_notification_subscriptions(sender, instance, created, **kwargs):
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This gets added on demand now

@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 4 times, most recently from f5b82c4 to 41da71c Compare September 4, 2025 16:57
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 41da71c to f9003e8 Compare September 4, 2025 17:02
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from a432fac to 566ca6a Compare September 4, 2025 18:19
@@ -21,10 +21,10 @@
from framework.celery_tasks import app as celery_app
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Johnetordoff Can I remove this?

@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 3 times, most recently from 8efc5d3 to 86ef26a Compare September 4, 2025 20:08
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 86ef26a to a28feef Compare September 4, 2025 21:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants