diff --git a/docker-compose/requirements/djangoserver/file/server/server/models.py b/docker-compose/requirements/djangoserver/file/server/server/models.py index 09e5a26..92446f7 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/models.py +++ b/docker-compose/requirements/djangoserver/file/server/server/models.py @@ -18,6 +18,7 @@ class Message(models.Model): date = models.DateTimeField(auto_now_add=True) sender = models.ForeignKey("User",on_delete=models.SET_NULL, null=True, related_name="sender") to = models.ForeignKey("User", on_delete=models.CASCADE, related_name="to") + read = models.BooleanField(default=False) content = models.TextField() class GameResults(models.Model): diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py index 16f12f6..0f30999 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py @@ -6,32 +6,34 @@ # By: edbernar +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/08/03 15:10:23 by edbernar #+# #+# # -# Updated: 2024/09/14 18:31:45 by tomoron ### ########.fr # +# Updated: 2024/09/28 20:42:02 by tomoron ### ########.fr # # # # **************************************************************************** # import asyncio import json from ..models import Message, User +from django.db.models import Q from asgiref.sync import sync_to_async @sync_to_async def getPrivateListUser(socket, content=None): - # |TOM| Faire une requête à la base de données pour récupérer la liste des - # utilisateurs qui doivent apparaitre dans la liste du chat privé - # (ceux qui ont eu conversation avec l'utilisateur) - # Si user existe pas, faire ça : socket.sendError("User not found", 9008) - id = socket.id - request = """ - SELECT DISTINCT server_user.id AS id, username, pfp - FROM server_user - LEFT JOIN server_message AS sended ON sended.to_id=server_user.id - LEFT JOIN server_message AS received ON received.sender_id=server_user.id - WHERE sended.sender_id=%s OR received.to_id=%s; - """ - res = User.objects.raw(request,[id,id]) - data = [] - for x in res: - status = "online" if x.id in socket.onlinePlayers else "offline" - data.append({"name":x.username, "status": status, "pfp":x.pfp, "id":x.id}) - socket.sync_send(json.dumps({"type": "private_list_user", "content": data})) + try: + uid = socket.id + request = """ + SELECT DISTINCT server_user.id AS id, username, pfp + FROM server_user + LEFT JOIN server_message AS sended ON sended.to_id=server_user.id + LEFT JOIN server_message AS received ON received.sender_id=server_user.id + WHERE sended.sender_id=%s OR received.to_id=%s; + """ + res = User.objects.raw(request,[uid,uid]) + socketUser = User.objects.get(id=uid) + data = [] + for x in res: + unread = Message.objects.filter(Q(sender=x) & Q(to=socketUser) & Q(read=False)).exists() + status = "online" if x.id in socket.onlinePlayers else "offline" + data.append({"name":x.username, "status": status, "pfp":x.pfp, "id":x.id,"haveUnread":unread}) + socket.sync_send(json.dumps({"type": "private_list_user", "content": data})) + except Exception as e: + socket.sendError("Invalid request", 9005, e) diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/readMessage.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/readMessage.py new file mode 100644 index 0000000..6333ba8 --- /dev/null +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/readMessage.py @@ -0,0 +1,30 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# readMessage.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: tomoron +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/09/28 21:03:27 by tomoron #+# #+# # +# Updated: 2024/09/28 21:18:29 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +from django.db.models import Q +from asgiref.sync import sync_to_async +from ..models import User, Message + +@sync_to_async +def readMessage(socket, content): + try: + if("id" not in content): + socket.sendError("Missing field", 9034) + dbUser = User.objects.filter(id=content["id"]) + if(not dbUser.exists): + socket.sendError("User not found", 9008) + return + dbUser = dbUser[0] + dbSocketUser = User.objects.get(id=socket.id) + Message.objects.filter(Q(to=dbSocketUser) & Q(sender=dbUser) & Q(read=False)).update(read=True) + except Exception as e: + socket.sendError("Invalid request", 9005, e) diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/statusMessage.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/statusMessage.py new file mode 100644 index 0000000..9782e4d --- /dev/null +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/statusMessage.py @@ -0,0 +1,24 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# statusMessage.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: tomoron +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/09/28 20:03:49 by tomoron #+# #+# # +# Updated: 2024/09/28 20:20:12 by tomoron ### ########.fr # +# # +# **************************************************************************** # + +from django.db.models import Q +from ..models import User, Message +from asgiref.sync import sync_to_async + +@sync_to_async +def statusMessage(socket,content): + try: + user = User.objects.get(id=socket.id) + haveUnread = Message.objects.filter(Q(to=user) & Q(read=False)).exists() + socket.sync_send({"type":"status_message","content":{"haveUnread" : haveUnread}}) + except Exception as e: + socket.sendError("Invalid request", 9005, e) diff --git a/docker-compose/requirements/djangoserver/file/server/server/websocket.py b/docker-compose/requirements/djangoserver/file/server/server/websocket.py index 5382155..83fe561 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/websocket.py +++ b/docker-compose/requirements/djangoserver/file/server/server/websocket.py @@ -6,7 +6,7 @@ # By: edbernar