mirror of
https://github.com/langgenius/dify.git
synced 2026-09-04 16:07:08 +08:00
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: hjlarry <hjlarry@163.com>
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
"""Billing-backed notification gateway."""
|
|
|
|
from collections.abc import Mapping
|
|
from typing import Any, override
|
|
|
|
from services.billing_service import BillingService
|
|
from services.entities.notification_entities import (
|
|
AccountNotification,
|
|
AccountNotificationBatch,
|
|
NotificationContent,
|
|
)
|
|
from services.notification_service import NotificationGateway
|
|
|
|
|
|
class BillingNotificationGateway(NotificationGateway):
|
|
@override
|
|
def get_active(self, account_id: str) -> AccountNotificationBatch:
|
|
payload = BillingService.get_account_notification(account_id)
|
|
notifications = tuple(self._map_notification(item) for item in payload.get("notifications") or ())
|
|
return AccountNotificationBatch(
|
|
should_show=bool(payload.get("shouldShow")),
|
|
notifications=notifications,
|
|
)
|
|
|
|
@override
|
|
def dismiss(self, notification_id: str, account_id: str) -> None:
|
|
BillingService.dismiss_notification(notification_id=notification_id, account_id=account_id)
|
|
|
|
@classmethod
|
|
def _map_notification(cls, payload: Mapping[str, Any]) -> AccountNotification:
|
|
raw_contents = payload.get("contents") or {}
|
|
contents = {language: cls._map_content(content) for language, content in raw_contents.items() if content}
|
|
return AccountNotification(
|
|
notification_id=payload.get("notificationId"),
|
|
frequency=payload.get("frequency"),
|
|
contents=contents,
|
|
)
|
|
|
|
@staticmethod
|
|
def _map_content(payload: Mapping[str, Any]) -> NotificationContent:
|
|
return NotificationContent(
|
|
# The application service owns the requested-language fallback.
|
|
lang=payload.get("lang") or "",
|
|
title=payload.get("title") or "",
|
|
subtitle=payload.get("subtitle") or "",
|
|
body=payload.get("body") or "",
|
|
title_pic_url=payload.get("titlePicUrl") or "",
|
|
)
|