add message read status and a request to set all the messages of a conversation as read
This commit is contained in:
@ -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):
|
||||
|
@ -6,22 +6,20 @@
|
||||
# By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# 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
|
||||
try:
|
||||
uid = socket.id
|
||||
request = """
|
||||
SELECT DISTINCT server_user.id AS id, username, pfp
|
||||
FROM server_user
|
||||
@ -29,9 +27,13 @@ def getPrivateListUser(socket, content=None):
|
||||
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])
|
||||
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})
|
||||
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)
|
||||
|
@ -0,0 +1,30 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# readMessage.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# 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)
|
@ -0,0 +1,24 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# statusMessage.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: tomoron <tomoron@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# 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)
|
@ -6,7 +6,7 @@
|
||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/09/09 14:31:30 by tomoron #+# #+# #
|
||||
# Updated: 2024/09/28 03:19:46 by tomoron ### ########.fr #
|
||||
# Updated: 2024/09/28 21:03:10 by tomoron ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
@ -32,16 +32,18 @@ from .typeRequests.getUserInfo import getUserInfo
|
||||
from .typeRequests.getPrivateInfo import getPrivateInfo
|
||||
from .typeRequests.changePrivateInfo import changePrivateInfo
|
||||
from .typeRequests.changePfp import changePfp
|
||||
from .typeRequests.statusMessage import statusMessage
|
||||
from .typeRequests.readMessage import readMessage
|
||||
|
||||
typeRequest = ["login", "get_private_list_user", "get_private_list_message",
|
||||
"send_private_message", "create_account", "get_all_list_user", "game",
|
||||
"search_user", "get_user_info", "change_pfp", "change_banner",
|
||||
"get_private_info", "change_private_info"
|
||||
"get_private_info", "change_private_info","status_message", "read_message"
|
||||
]
|
||||
functionRequest = [login, getPrivateListUser, getPrivateListMessage,
|
||||
sendPrivateMessage, createAccount, getAllListUser, gameRequest,
|
||||
searchUser, getUserInfo, changePfp, changeBanner,
|
||||
getPrivateInfo, changePrivateInfo
|
||||
getPrivateInfo, changePrivateInfo, statusMessage, readMessage
|
||||
]
|
||||
|
||||
from random import randint
|
||||
|
@ -35,6 +35,7 @@
|
||||
- 9031 : You can't set or change this field if you have a 42 account
|
||||
- 9032 : Your opponent isn't online
|
||||
- 9033 : Skin id out of range
|
||||
- 9034 : missing field
|
||||
|
||||
- 9100 : Action out of range
|
||||
- 9101 : No game started
|
||||
|
Reference in New Issue
Block a user