chat implemented, testing needed

This commit is contained in:
2026-05-20 00:52:56 +02:00
parent c7de2dbcdc
commit d52af2c495
14 changed files with 144 additions and 17 deletions

View File

@@ -3,8 +3,9 @@ import json
from channels.db import database_sync_to_async
from channels.generic.websocket import AsyncWebsocketConsumer
from django.utils import timezone
from .models import Chat, Message
from .models import Chat, ChatReadStatus, Message
class ChatConsumer(AsyncWebsocketConsumer):
@@ -95,6 +96,14 @@ class ChatConsumer(AsyncWebsocketConsumer):
"user": user.username,
})
elif msg_type == "mark_read":
await _mark_read(chat_id=self.chat_id, user=user)
await self.channel_layer.group_send(self.chat_name, {
"type": "read.status",
"user": user.username,
"chat_id": int(self.chat_id),
})
else:
await self.send(text_data=json.dumps({"error": "Unsupported message type."}))
@@ -155,6 +164,13 @@ class ChatConsumer(AsyncWebsocketConsumer):
"user": event["user"],
}))
async def read_status(self, event):
await self.send(text_data=json.dumps({
"type": "read_status",
"user": event["user"],
"chat_id": event["chat_id"],
}))
# ---------------------------------------------------------------------------
# DB helpers (run in thread pool via database_sync_to_async)
@@ -179,3 +195,12 @@ def _create_message(chat_id, sender, content, reply_to_id=None):
def _toggle_reaction(message_id, user, emoji):
message = Message.objects.get(pk=message_id)
return message.toggle_reaction(user, emoji)
@database_sync_to_async
def _mark_read(chat_id, user):
ChatReadStatus.objects.update_or_create(
user=user,
chat_id=chat_id,
defaults={"last_read_at": timezone.now()},
)