devnamdev2003
up3
727a40a
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)