초기 커밋
This commit is contained in:
47
app/tasks/notification_tasks.py
Normal file
47
app/tasks/notification_tasks.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import structlog
|
||||
|
||||
from app.tasks.celery_app import celery_app
|
||||
|
||||
logger = structlog.get_logger("tasks.notification")
|
||||
|
||||
|
||||
@celery_app.task(name="app.tasks.notification_tasks.send_push_notification")
|
||||
def send_push_notification(user_id: int, title: str, message: str) -> dict:
|
||||
"""Send push notification to a user via Socket.IO."""
|
||||
import asyncio
|
||||
|
||||
from app.communication.socketio.server import sio
|
||||
|
||||
async def _send() -> None:
|
||||
await sio.emit(
|
||||
"notification",
|
||||
{"title": title, "message": message},
|
||||
room=f"user:{user_id}",
|
||||
namespace="/notification",
|
||||
)
|
||||
|
||||
asyncio.get_event_loop().run_until_complete(_send())
|
||||
logger.info("push_sent", user_id=user_id)
|
||||
return {"status": "sent", "user_id": user_id}
|
||||
|
||||
|
||||
@celery_app.task(name="app.tasks.notification_tasks.send_bulk_notification")
|
||||
def send_bulk_notification(user_ids: list[int], title: str, message: str) -> dict:
|
||||
"""Send notification to multiple users and store in MongoDB."""
|
||||
import asyncio
|
||||
|
||||
from app.models.mongodb.notification import Notification
|
||||
|
||||
async def _bulk() -> int:
|
||||
notifications = [
|
||||
Notification(user_id=uid, title=title, message=message)
|
||||
for uid in user_ids
|
||||
]
|
||||
await Notification.insert_many(notifications)
|
||||
return len(notifications)
|
||||
|
||||
count = asyncio.get_event_loop().run_until_complete(_bulk())
|
||||
logger.info("bulk_notification_sent", count=count)
|
||||
return {"sent": count}
|
||||
Reference in New Issue
Block a user