-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add notification model * Update notification model
- Loading branch information
1 parent
0170036
commit 4cf37d1
Showing
8 changed files
with
144 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
bims/migrations/0344_alter_bimsdocument_authors_notification.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Generated by Django 4.1.10 on 2023-08-23 09:07 | ||
|
||
from django.conf import settings | ||
from django.db import migrations, models | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
('bims', '0343_locationsite_ecosystem_type_and_more'), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='Notification', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('name', models.CharField(choices=[('SITE_VISIT_VALIDATION', 'Site visit is ready to be validated'), ('DOWNLOAD_REQUEST', 'Download request notification'), ('ACCOUNT_CREATED', 'Account created email notification'), ('SASS_CREATED', 'SASS created email notification')], max_length=255, unique=True)), | ||
('description', models.TextField(blank=True)), | ||
('users', models.ManyToManyField(related_name='notifications', to=settings.AUTH_USER_MODEL)), | ||
], | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
from typing import List | ||
|
||
from django.db import models | ||
from django.conf import settings | ||
from django.contrib.auth import get_user_model | ||
|
||
# Notification Choices | ||
SITE_VISIT_VALIDATION = 'SITE_VISIT_VALIDATION' | ||
SITE_VALIDATION = 'SITE_VALIDATION' | ||
NEW_TAXONOMY = 'NEW_TAXONOMY' | ||
DOWNLOAD_REQUEST = 'DOWNLOAD_REQUEST' | ||
ACCOUNT_CREATED = 'ACCOUNT_CREATED' | ||
SASS_CREATED = 'SASS_CREATED' | ||
|
||
NOTIFICATION_TYPES = ( | ||
(SITE_VISIT_VALIDATION, 'Site visit is ready to be validated'), | ||
(SITE_VALIDATION, 'Site is ready to be validated'), | ||
(DOWNLOAD_REQUEST, 'Download request notification'), | ||
(ACCOUNT_CREATED, 'Account created email notification'), | ||
(SASS_CREATED, 'SASS created email notification'), | ||
(NEW_TAXONOMY, 'New taxonomy email notification'), | ||
) | ||
|
||
|
||
class Notification(models.Model): | ||
name = models.CharField( | ||
max_length=255, | ||
choices=NOTIFICATION_TYPES, | ||
unique=True | ||
) | ||
description = models.TextField( | ||
blank=True | ||
) | ||
users = models.ManyToManyField( | ||
settings.AUTH_USER_MODEL, | ||
related_name='notifications', | ||
blank=False | ||
) | ||
|
||
@property | ||
def user_emails(self): | ||
return [user.email for user in self.users.all()] | ||
|
||
def __str__(self): | ||
return self.name | ||
|
||
|
||
def get_recipients_for_notification(notification_name: str) -> List[str]: | ||
""" | ||
Fetches the recipient emails for a given notification type. | ||
If the specific notification type isn't found, returns the emails of | ||
all superusers as a fallback. | ||
Args: | ||
- notification_name (str): The name of the notification type to | ||
fetch recipients for. | ||
Returns: | ||
- List[str]: A list of email addresses. | ||
""" | ||
try: | ||
recipients = Notification.objects.get(name=notification_name).user_emails | ||
except Notification.DoesNotExist: | ||
recipients = list( | ||
get_user_model().objects.filter( | ||
is_superuser=True | ||
).values_list('email', flat=True) | ||
) | ||
return recipients |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters