File size: 2,527 Bytes
727a40a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from chat.models import UserRelation, Messages
from django.http.response import JsonResponse
from django.contrib import messages as django_messages
from django.db.models import Q # Import Q
@login_required(login_url="login")
def chat(request, username):
usersen = request.user
try:
# Get the friend and the relation in one go
friend = User.objects.get(username=username)
relation = UserRelation.objects.get(user=usersen, friend=friend, accepted=True)
except (User.DoesNotExist, UserRelation.DoesNotExist):
# If user or relation doesn't exist, show error message and redirect
django_messages.error(
request, "User or relation not found. You cannot chat with this user."
)
return redirect("home")
# Retrieve messages in one query, sorted by timestamp
messages = Messages.objects.filter(
(Q(sender_name=usersen) & Q(receiver_name=friend))
| (Q(sender_name=friend) & Q(receiver_name=usersen))
).order_by("timestamp")
# Handle GET method to render the chat
if request.method == "GET":
return render(
request,
"chat.html",
{
"relation_key": relation.relation_key,
"messages": messages,
"curr_user": usersen,
"friend": friend,
},
)
# If the method is not GET, return an error response
return JsonResponse({"error": "Invalid request method"}, status=405)
# @login_required(login_url="login")
# @csrf_exempt
# def message_list(request, sender=None, receiver=None):
# if request.method == "GET":
# messages = Messages.objects.filter(
# sender_name=sender, receiver_name=receiver, seen=False
# )
# serializer = MessageSerializer(
# messages, many=True, context={"request": request}
# )
# for message in messages:
# message.seen = True
# message.save()
# return JsonResponse(serializer.data, safe=False)
# elif request.method == "POST":
# data = JSONParser().parse(request)
# serializer = MessageSerializer(data=data)
# if serializer.is_valid():
# serializer.save()
# return JsonResponse(serializer.data, status=201)
# return JsonResponse(serializer.errors, status=400)
|