Skip to content

Commit 82af3db

Browse files
committed
creates notifier
1 parent 5ec0e54 commit 82af3db

File tree

1 file changed

+43
-9
lines changed
  • services/payments/src/simcore_service_payments/services

1 file changed

+43
-9
lines changed

services/payments/src/simcore_service_payments/services/socketio.py

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import logging
2+
from dataclasses import dataclass
23

34
import socketio
45
from fastapi import FastAPI
56
from fastapi.encoders import jsonable_encoder
67
from models_library.api_schemas_payments.socketio import (
78
SOCKET_IO_PAYMENT_COMPLETED_EVENT,
9+
SOCKET_IO_PAYMENT_METHOD_ACKED_EVENT,
10+
)
11+
from models_library.api_schemas_webserver.wallets import (
12+
PaymentMethodTransaction,
13+
PaymentTransaction,
814
)
9-
from models_library.api_schemas_webserver.wallets import PaymentTransaction
1015
from models_library.users import GroupID
1116
from servicelib.socketio_utils import cleanup_socketio_async_pubsub_manager
1217
from settings_library.rabbit import RabbitSettings
@@ -16,6 +21,37 @@
1621
_logger = logging.getLogger(__name__)
1722

1823

24+
@dataclass
25+
class Notifier:
26+
_sio_manager: socketio.AsyncAioPikaManager
27+
28+
async def notify_payment_completed(
29+
self,
30+
user_primary_group_id: GroupID,
31+
payment: PaymentTransaction,
32+
):
33+
# NOTE: We assume that the user has been added to all
34+
# rooms associated to his groups
35+
assert payment.completed_at is not None # nosec
36+
37+
return await self._sio_manager.emit(
38+
SOCKET_IO_PAYMENT_COMPLETED_EVENT,
39+
data=jsonable_encoder(payment, by_alias=True),
40+
room=f"{user_primary_group_id}",
41+
)
42+
43+
async def notify_payment_method_acked(
44+
self,
45+
user_primary_group_id: GroupID,
46+
payment_method: PaymentMethodTransaction,
47+
):
48+
return await self._sio_manager.emit(
49+
SOCKET_IO_PAYMENT_METHOD_ACKED_EVENT,
50+
data=jsonable_encoder(payment_method, by_alias=True),
51+
room=f"{user_primary_group_id}",
52+
)
53+
54+
1955
def setup_socketio(app: FastAPI):
2056
settings: RabbitSettings = get_rabbitmq_settings(app)
2157

@@ -31,6 +67,9 @@ async def _on_startup() -> None:
3167
url=settings.dsn, logger=_logger, write_only=True
3268
)
3369

70+
# NOTE: this might be moved somewhere else when notifier incorporates emails etc
71+
app.state.notifier = Notifier(_sio_manager=app.state.external_socketio)
72+
3473
async def _on_shutdown() -> None:
3574
if app.state.external_socketio:
3675
await cleanup_socketio_async_pubsub_manager(
@@ -47,14 +86,9 @@ async def notify_payment_completed(
4786
user_primary_group_id: GroupID,
4887
payment: PaymentTransaction,
4988
):
50-
# NOTE: We assume that the user has been added to all
51-
# rooms associated to his groups
52-
assert payment.completed_at is not None # nosec
5389

54-
external_socketio: socketio.AsyncAioPikaManager = app.state.external_socketio
90+
notifier: Notifier = app.state.notifier
5591

56-
return await external_socketio.emit(
57-
SOCKET_IO_PAYMENT_COMPLETED_EVENT,
58-
data=jsonable_encoder(payment, by_alias=True),
59-
room=f"{user_primary_group_id}",
92+
return await notifier.notify_payment_completed(
93+
user_primary_group_id=user_primary_group_id, payment=payment
6094
)

0 commit comments

Comments
 (0)