Merge branch 'main' of github.com:Kum1ta/PTME_Transcendence
This commit is contained in:
@ -18,6 +18,7 @@ class Message(models.Model):
|
|||||||
date = models.DateTimeField(auto_now_add=True)
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
sender = models.ForeignKey("User",on_delete=models.SET_NULL, null=True, related_name="sender")
|
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")
|
to = models.ForeignKey("User", on_delete=models.CASCADE, related_name="to")
|
||||||
|
read = models.BooleanField(default=False)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
|
|
||||||
class GameResults(models.Model):
|
class GameResults(models.Model):
|
||||||
|
@ -6,32 +6,34 @@
|
|||||||
# By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ #
|
# By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/08/03 15:10:23 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 asyncio
|
||||||
import json
|
import json
|
||||||
from ..models import Message, User
|
from ..models import Message, User
|
||||||
|
from django.db.models import Q
|
||||||
from asgiref.sync import sync_to_async
|
from asgiref.sync import sync_to_async
|
||||||
|
|
||||||
@sync_to_async
|
@sync_to_async
|
||||||
def getPrivateListUser(socket, content=None):
|
def getPrivateListUser(socket, content=None):
|
||||||
# |TOM| Faire une requête à la base de données pour récupérer la liste des
|
try:
|
||||||
# utilisateurs qui doivent apparaitre dans la liste du chat privé
|
uid = socket.id
|
||||||
# (ceux qui ont eu conversation avec l'utilisateur)
|
request = """
|
||||||
# Si user existe pas, faire ça : socket.sendError("User not found", 9008)
|
SELECT DISTINCT server_user.id AS id, username, pfp
|
||||||
id = socket.id
|
FROM server_user
|
||||||
request = """
|
LEFT JOIN server_message AS sended ON sended.to_id=server_user.id
|
||||||
SELECT DISTINCT server_user.id AS id, username, pfp
|
LEFT JOIN server_message AS received ON received.sender_id=server_user.id
|
||||||
FROM server_user
|
WHERE sended.sender_id=%s OR received.to_id=%s;
|
||||||
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
|
res = User.objects.raw(request,[uid,uid])
|
||||||
WHERE sended.sender_id=%s OR received.to_id=%s;
|
socketUser = User.objects.get(id=uid)
|
||||||
"""
|
data = []
|
||||||
res = User.objects.raw(request,[id,id])
|
for x in res:
|
||||||
data = []
|
unread = Message.objects.filter(Q(sender=x) & Q(to=socketUser) & Q(read=False)).exists()
|
||||||
for x in res:
|
status = "online" if x.id in socket.onlinePlayers else "offline"
|
||||||
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})
|
||||||
data.append({"name":x.username, "status": status, "pfp":x.pfp, "id":x.id})
|
socket.sync_send(json.dumps({"type": "private_list_user", "content": data}))
|
||||||
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. +#+ +:+ +#+ #
|
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/09/09 14:31:30 by tomoron #+# #+# #
|
# 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.getPrivateInfo import getPrivateInfo
|
||||||
from .typeRequests.changePrivateInfo import changePrivateInfo
|
from .typeRequests.changePrivateInfo import changePrivateInfo
|
||||||
from .typeRequests.changePfp import changePfp
|
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",
|
typeRequest = ["login", "get_private_list_user", "get_private_list_message",
|
||||||
"send_private_message", "create_account", "get_all_list_user", "game",
|
"send_private_message", "create_account", "get_all_list_user", "game",
|
||||||
"search_user", "get_user_info", "change_pfp", "change_banner",
|
"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,
|
functionRequest = [login, getPrivateListUser, getPrivateListMessage,
|
||||||
sendPrivateMessage, createAccount, getAllListUser, gameRequest,
|
sendPrivateMessage, createAccount, getAllListUser, gameRequest,
|
||||||
searchUser, getUserInfo, changePfp, changeBanner,
|
searchUser, getUserInfo, changePfp, changeBanner,
|
||||||
getPrivateInfo, changePrivateInfo
|
getPrivateInfo, changePrivateInfo, statusMessage, readMessage
|
||||||
]
|
]
|
||||||
|
|
||||||
from random import randint
|
from random import randint
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
- 9031 : You can't set or change this field if you have a 42 account
|
- 9031 : You can't set or change this field if you have a 42 account
|
||||||
- 9032 : Your opponent isn't online
|
- 9032 : Your opponent isn't online
|
||||||
- 9033 : Skin id out of range
|
- 9033 : Skin id out of range
|
||||||
|
- 9034 : missing field
|
||||||
|
|
||||||
- 9100 : Action out of range
|
- 9100 : Action out of range
|
||||||
- 9101 : No game started
|
- 9101 : No game started
|
||||||
|
Reference in New Issue
Block a user