mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-20 20:48:11 -05:00
feat(backend): clean up + better handling
This commit is contained in:
@@ -53,6 +53,14 @@ async def get_user_by_id(user_id: str) -> User:
|
||||
return User.model_validate(user)
|
||||
|
||||
|
||||
async def get_user_email_by_id(user_id: str) -> str:
|
||||
try:
|
||||
user = await prisma.user.find_unique_or_raise(where={"id": user_id})
|
||||
return user.email
|
||||
except Exception as e:
|
||||
raise DatabaseError(f"Failed to get user email for user {user_id}: {e}") from e
|
||||
|
||||
|
||||
async def create_default_user() -> Optional[User]:
|
||||
user = await prisma.user.find_unique(where={"id": DEFAULT_USER_ID})
|
||||
if not user:
|
||||
|
||||
@@ -28,6 +28,7 @@ from backend.data.user import (
|
||||
get_active_user_ids_in_timerange,
|
||||
get_active_users_ids,
|
||||
get_user_by_id,
|
||||
get_user_email_by_id,
|
||||
get_user_integrations,
|
||||
get_user_metadata,
|
||||
get_user_notification_preference,
|
||||
@@ -105,6 +106,7 @@ class DatabaseManager(AppService):
|
||||
get_active_user_ids_in_timerange
|
||||
)
|
||||
get_user_by_id = exposed_run_and_wait(get_user_by_id)
|
||||
get_user_email_by_id = exposed_run_and_wait(get_user_email_by_id)
|
||||
get_user_notification_preference = exposed_run_and_wait(
|
||||
get_user_notification_preference
|
||||
)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import logging
|
||||
import pathlib
|
||||
|
||||
from backend.util.text import TextFormatter
|
||||
from postmarker.core import PostmarkClient
|
||||
from postmarker.models.emails import EmailManager
|
||||
from prisma.enums import NotificationType
|
||||
@@ -12,6 +11,7 @@ from backend.data.notifications import (
|
||||
T_co,
|
||||
)
|
||||
from backend.util.settings import Settings
|
||||
from backend.util.text import TextFormatter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
settings = Settings()
|
||||
@@ -26,9 +26,14 @@ class TypedPostmarkClient(PostmarkClient):
|
||||
|
||||
class EmailSender:
|
||||
def __init__(self):
|
||||
self.postmark = TypedPostmarkClient(
|
||||
server_token=settings.secrets.postmark_server_api_token
|
||||
)
|
||||
if settings.secrets.postmark_server_api_token:
|
||||
self.postmark = TypedPostmarkClient(
|
||||
server_token=settings.secrets.postmark_server_api_token
|
||||
)
|
||||
else:
|
||||
logger.warning(
|
||||
"Postmark server API token not found, email sending disabled"
|
||||
)
|
||||
self.formatter = TextFormatter()
|
||||
|
||||
def send_templated(
|
||||
@@ -37,6 +42,9 @@ class EmailSender:
|
||||
user_email: str,
|
||||
data: NotificationEventModel[T_co] | list[NotificationEventModel[T_co]],
|
||||
):
|
||||
if not self.postmark:
|
||||
logger.warning("Postmark client not initialized, email not sent")
|
||||
return
|
||||
body = self._get_template(notification)
|
||||
# use the jinja2 library to render the template
|
||||
body = self.formatter.format_string(body, data)
|
||||
|
||||
@@ -159,8 +159,7 @@ class NotificationManager(AppService):
|
||||
parsed_event = NotificationEventModel[
|
||||
get_data_type(event.type)
|
||||
].model_validate_json(message)
|
||||
# Implementation of actual notification sending would go here
|
||||
user_email = get_db_client().get_user_by_id(event.user_id).email
|
||||
user_email = get_db_client().get_user_email_by_id(event.user_id)
|
||||
should_send = (
|
||||
get_db_client()
|
||||
.get_user_notification_preference(event.user_id)
|
||||
|
||||
Reference in New Issue
Block a user