From 0475adbb9bbc97432d2d1ece448aebe1fdc5ba7b Mon Sep 17 00:00:00 2001 From: tomoron Date: Mon, 26 Aug 2024 20:57:29 +0200 Subject: [PATCH] change sql request for getPrivateMessageUser and add default profile picture for users --- .../djangoserver/file/server/server/models.py | 2 +- .../server/typeRequests/getPrivateListUser.py | 11 +++++++++-- .../djangoserver/file/server/test_data.sql | 4 ++-- .../requirements/djangoserver/start.sh | 1 - .../nginx/static/img/default_pfp.jpg | Bin 0 -> 37526 bytes 5 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 docker-compose/requirements/nginx/static/img/default_pfp.jpg diff --git a/docker-compose/requirements/djangoserver/file/server/server/models.py b/docker-compose/requirements/djangoserver/file/server/server/models.py index 057baca..4c47c9d 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/models.py +++ b/docker-compose/requirements/djangoserver/file/server/server/models.py @@ -6,7 +6,7 @@ class User(models.Model): mail = models.EmailField(unique=True) password = models.CharField(max_length=100) id42 = models.DecimalField(max_digits=15, decimal_places=0, null=True, unique=True) - pfp = models.CharField(max_length=1024) + pfp = models.CharField(max_length=1024, default="/static/default_pfp.jpg") class Message(models.Model): id = models.AutoField(primary_key=True) 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 4bdc532..1b261e3 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateListUser.py @@ -6,7 +6,7 @@ # By: edbernar +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/08/03 15:10:23 by edbernar #+# #+# # -# Updated: 2024/08/25 21:23:08 by tomoron ### ########.fr # +# Updated: 2024/08/26 20:07:57 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -59,7 +59,14 @@ def getPrivateListUser(socket, content=None): # (ceux qui ont eu conversation avec l'utilisateur) # Si user existe pas, faire ça : socket.sendError("User not found", 9008) id = socket.scope["session"].get("id", 0) - res = User.objects.raw("SELECT DISTINCT server_user.id AS id,'online' AS status, username, pfp FROM server_user RIGHT JOIN server_message ON server_message.to_id=server_user.id WHERE sender_id=%s;", [id]) + request = """ + SELECT DISTINCT server_user.id AS id,'online' AS status, 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: data.append({"name":x.username, "status":x.status, "pfp":x.pfp, "id":x.id}) diff --git a/docker-compose/requirements/djangoserver/file/server/test_data.sql b/docker-compose/requirements/djangoserver/file/server/test_data.sql index 6783f64..9ab96fa 100644 --- a/docker-compose/requirements/djangoserver/file/server/test_data.sql +++ b/docker-compose/requirements/djangoserver/file/server/test_data.sql @@ -1,6 +1,6 @@ INSERT INTO "server_user" ("username", "mail", "password", "id42", "pfp") VALUES -('tomoron', 'a@a.com', 'a5f1efc32bcc4dc53e471f9620b78ca9', NULL, 'https://localhost/img.jpg'), -('patate', 'b@b.com', '5e547979d3f20f43c87e5e0e8406f267', NULL, 'https://localhost/pfp.jpg'); +('tomoron', 'a@a.com', 'a5f1efc32bcc4dc53e471f9620b78ca9', NULL, '/static/default_pfp.jpg'), +('patate', 'b@b.com', '5e547979d3f20f43c87e5e0e8406f267', NULL, '/static/default_pfp.jpg'); INSERT INTO "server_message" ("date", "sender_id", "to_id", "content") VALUES ('2024-08-25 18:10:54.27476+00', 1, 2, 'coucou'), diff --git a/docker-compose/requirements/djangoserver/start.sh b/docker-compose/requirements/djangoserver/start.sh index dad47ab..5711853 100644 --- a/docker-compose/requirements/djangoserver/start.sh +++ b/docker-compose/requirements/djangoserver/start.sh @@ -2,6 +2,5 @@ until pg_isready -h "$DB_HOST"; do sleep 0.5 ;echo "waiting for database";done cd /var/www/djangoserver/server python3.12 manage.py makemigrations server python3.12 manage.py migrate -python3.12 manage.py collectstatic #python3 manage.py runserver 0.0.0.0:8000 daphne -p 8000 -b 0.0.0.0 server.asgi:application diff --git a/docker-compose/requirements/nginx/static/img/default_pfp.jpg b/docker-compose/requirements/nginx/static/img/default_pfp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4666351757e3af5bf090ef57e2b148613d954791 GIT binary patch literal 37526 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 literal 0 HcmV?d00001