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 3 times, most recently from 12a9842 to 4c69f7e Compare July 15, 2025 16:58
Allow the User Preprints endpoint (/v2/users/me/preprints) to be filterable by title (?filter[title]=example), similar to how the User Nodes endpoint (/v2/users/me/nodes) supports this filter capability
…terForOpenScience#11210)

Enable Product Team to Force Archive Registrations in the Admin App
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from bb4f441 to 106679b Compare July 16, 2025 14:29
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 106679b to d43de2b Compare July 16, 2025 14:39
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch 2 times, most recently from 4c3adc7 to e7266b9 Compare July 16, 2025 22:11
@@ -830,7 +860,7 @@ def addon_deleted_file(auth, target, error_type='BLAME_PROVIDER', **kwargs):
'version_id': None,
'file_guid': file_guid,
'file_id': file_node._id,
'provider': file_node.provider,
'preprint_word': getattr(file_node.target.provider, 'preprint_word', None),
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@@ -190,7 +183,19 @@ async def test_submit_success(self):
assert self.mock_job.refresh.call_count == 4
assert mock_async_sleep.call_count == 4
mock_close.assert_called()
self.mock_send_grid.assert_called()
mock_send_mail.assert_called_with(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added these back in based on previous CR

@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from b241b26 to 05aad5e Compare August 31, 2025 11:25
return {'status': 'success'}


@file_signals.file_updated.connect
def addon_delete_file_node(self, target, user, event_type, payload):
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Notice event_type is gone as that was always derived from the payload anyway, cleans up the logic a lot.

@@ -69,16 +69,6 @@ def form_valid(self, form):

# create AdminProfile for this new user
profile, created = AdminProfile.objects.get_or_create(user=osf_user)

for group in form.cleaned_data.get('group_perms'):
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 Should get done on demand now


class FrequencyField(ser.ChoiceField):
def __init__(self, **kwargs):
super().__init__(choices=['none', 'instantly', 'daily', 'weekly', 'monthly'], **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.

@Johnetordoff keep for now

Johnetordoff and others added 3 commits August 31, 2025 08:03
…/centerforopenscience/osf.io into add-new-notifications-data-model

* 'add-new-notifications-data-model' of https://github.com/centerforopenscience/osf.io:
  revert some syntax changes to shrink diff
  revert ResourceContributorsCreateSerializer refactor
  update tests
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 920ac12 to d3c238c Compare August 31, 2025 15:10
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from d3c238c to 8937680 Compare September 1, 2025 13:46
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 1a4976f to de56134 Compare September 1, 2025 14:01
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 22e81be to 6816040 Compare September 1, 2025 17:58
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 3ca708c to 5d0b6b4 Compare September 2, 2025 00:20
@Johnetordoff Johnetordoff force-pushed the add-new-notifications-data-model branch from 5d0b6b4 to b8fdc80 Compare September 2, 2025 00:35
John Tordoff added 2 commits September 1, 2025 20:47
…/centerforopenscience/osf.io into add-new-notifications-data-model

* 'add-new-notifications-data-model' of https://github.com/centerforopenscience/osf.io:
  fix more test stuff

# Conflicts:
#	osf/models/schema_response.py
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.

7 participants