Refactor: create a notification service to use it outside of the ViewSet classes
parent
292de17556
commit
420a9522c5
|
@ -1,22 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from djmail import template_mail
|
from . import services
|
||||||
|
|
||||||
|
|
||||||
class NotificationSenderMixin(object):
|
class NotificationSenderMixin(object):
|
||||||
create_notification_template = None
|
create_notification_template = None
|
||||||
update_notification_template = None
|
update_notification_template = None
|
||||||
destroy_notification_template = None
|
destroy_notification_template = None
|
||||||
|
notification_service = services.NotificationService()
|
||||||
def _send_notification_email(self, template_method, users=None, context=None):
|
|
||||||
mails = template_mail.MagicMailBuilder()
|
|
||||||
for user in users:
|
|
||||||
email = getattr(mails, template_method)(user, context)
|
|
||||||
email.send()
|
|
||||||
|
|
||||||
def post_save(self, obj, created=False):
|
|
||||||
super().post_save(obj, created)
|
|
||||||
self._post_save_notification_sender(obj, created)
|
|
||||||
|
|
||||||
def _post_save_notification_sender(self, obj, created=False):
|
def _post_save_notification_sender(self, obj, created=False):
|
||||||
users = obj.get_watchers_to_notify(self.request.user)
|
users = obj.get_watchers_to_notify(self.request.user)
|
||||||
|
@ -24,22 +15,26 @@ class NotificationSenderMixin(object):
|
||||||
context = {'changer': self.request.user, "comment": comment, 'object': obj}
|
context = {'changer': self.request.user, "comment": comment, 'object': obj}
|
||||||
|
|
||||||
if created:
|
if created:
|
||||||
self._send_notification_email(self.create_notification_template,
|
self.notification_service.send_notification_email(self.create_notification_template,
|
||||||
users=users, context=context)
|
users=users, context=context)
|
||||||
else:
|
else:
|
||||||
changed_fields = obj.get_changed_fields_list(self.request.DATA)
|
changed_fields = obj.get_changed_fields_list(self.request.DATA)
|
||||||
|
|
||||||
if changed_fields:
|
if changed_fields:
|
||||||
context["changed_fields"] = changed_fields
|
context["changed_fields"] = changed_fields
|
||||||
self._send_notification_email(self.update_notification_template,
|
self.notification_service.send_notification_email(self.update_notification_template,
|
||||||
users=users, context=context)
|
users=users, context=context)
|
||||||
|
|
||||||
|
def post_save(self, obj, created=False):
|
||||||
|
super().post_save(obj, created)
|
||||||
|
self._post_save_notification_sender(obj, created)
|
||||||
|
|
||||||
def destroy(self, request, *args, **kwargs):
|
def destroy(self, request, *args, **kwargs):
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
users = obj.get_watchers_to_notify(self.request.user)
|
users = obj.get_watchers_to_notify(self.request.user)
|
||||||
|
|
||||||
context = {'changer': self.request.user, 'object': obj}
|
context = {'changer': self.request.user, 'object': obj}
|
||||||
self._send_notification_email(self.destroy_notification_template,
|
self.notification_service.send_notification_email(self.destroy_notification_template,
|
||||||
users=users, context=context)
|
users=users, context=context)
|
||||||
|
|
||||||
return super().destroy(request, *args, **kwargs)
|
return super().destroy(request, *args, **kwargs)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from djmail import template_mail
|
||||||
|
|
||||||
|
import collections
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationService(object):
|
||||||
|
def send_notification_email(self, template_method, users=None, context=None):
|
||||||
|
if not users:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not isinstance(users, collections.Iterable):
|
||||||
|
users = (users,)
|
||||||
|
|
||||||
|
mails = template_mail.MagicMailBuilder()
|
||||||
|
for user in users:
|
||||||
|
email = getattr(mails, template_method)(user, context)
|
||||||
|
email.send()
|
Loading…
Reference in New Issue