23 lines
664 B
Python
23 lines
664 B
Python
import json
|
|
|
|
from django_redis import get_redis_connection
|
|
|
|
from apps.chat.events.event import MessageSentEvent
|
|
|
|
_KEY_TTL = 300
|
|
|
|
|
|
class LongPollPublisher:
|
|
def publish(self, event: MessageSentEvent) -> None:
|
|
redis = get_redis_connection("default")
|
|
key = f"chat_events:{event.chat_id}"
|
|
payload = json.dumps(
|
|
{
|
|
"post_id": event.post_id,
|
|
"sender_id": str(event.sender_id),
|
|
"message_type": event.message_type,
|
|
**{k: v for k, v in event.payload.items() if v is not None},
|
|
}
|
|
)
|
|
redis.rpush(key, payload)
|
|
redis.expire(key, _KEY_TTL)
|