Merge branch 'main' of github.com:Kum1ta/PTME_Transcendence

This commit is contained in:
Kum1ta
2024-09-28 21:50:47 +02:00
6 changed files with 82 additions and 22 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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