Fleshout some of the notifcation service
This is probably organized incorrectly. If it's a service it should be grouped with the other services
This commit is contained in:
parent
0b3b6f50fe
commit
6700bc9763
1 changed files with 46 additions and 3 deletions
|
|
@ -1,12 +1,55 @@
|
|||
from typing import Any
|
||||
from .data import Notification
|
||||
import abc
|
||||
from typing import Any
|
||||
|
||||
from src.services.email import EmailService
|
||||
from src.config import Config
|
||||
|
||||
from .data import Notification
|
||||
|
||||
# MUSTFIX: Needs real users!
|
||||
|
||||
|
||||
class NotificationService(abc.ABC):
|
||||
class NotificationSender(abc.ABC):
|
||||
"""A service that sends notifications to the user"""
|
||||
|
||||
def __init__(self, name: str):
|
||||
self._name = name
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
@abc.abstractmethod
|
||||
def notify(self, user: Any, notification: Notification):
|
||||
"""Send a notification"""
|
||||
pass
|
||||
|
||||
|
||||
class NotificationService:
|
||||
def __init__(self):
|
||||
self._senders = []
|
||||
|
||||
def register_sender(self, sender: NotificationSender):
|
||||
self._senders.append(sender)
|
||||
|
||||
def notify_user(self, user: Any, notification: Notification):
|
||||
for s in self._senders:
|
||||
if s.name in user.notification_methods:
|
||||
s.notify(user, notification)
|
||||
|
||||
|
||||
class EmailNotifier(NotificationSender):
|
||||
def __init__(self, email_service: EmailService):
|
||||
super().__init__('email')
|
||||
self._email_service = email_service
|
||||
|
||||
def notify(self, user: Any, notification: Notification):
|
||||
# TODO: Convert notification and user information into an EmailDTO for the email service
|
||||
pass
|
||||
|
||||
|
||||
def make_notification_service(email_service: EmailService):
|
||||
service = NotificationService()
|
||||
service.register_sender(EmailNotifier(email_service))
|
||||
|
||||
return service
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue