chat v2
This commit is contained in:
SDE
2023-08-09 19:55:10 +03:00
parent 2f089ecaa3
commit 7cfd5ce60b
5 changed files with 140 additions and 58 deletions

View File

@@ -1,7 +1,8 @@
import json import json
import datetime import datetime
from django.http import HttpResponse from django.http import HttpResponse, JsonResponse
from django.conf import settings from django.conf import settings
from django.utils.deprecation import MiddlewareMixin
def set_cookie(response, key, value, days_expire=7): def set_cookie(response, key, value, days_expire=7):
@@ -25,32 +26,63 @@ def set_cookie(response, key, value, days_expire=7):
return response return response
class ResponseInterceptionMiddleware: class ResponseInterceptionMiddleware:
# def __init__(self, get_response):
# self.get_response = get_response
#
# def __call__(self, request):
# return self.get_response(request)
# def process_request(self, request):
def __init__(self, get_response): def __init__(self, get_response):
self.get_response = get_response self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request): def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if request.user.is_authenticated:
request = request.user.user_profile.save_user_alerts_to_session(request)
response = self.get_response(request) response = self.get_response(request)
if request.user.is_authenticated:
for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
if for_save_to_session:
for key, val in for_save_to_session.items():
set_cookie(response, key, json.dumps(val), 30)
# Code to be executed for each request/response after
# the view is called.
try:
if type(response) == JsonResponse:
for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
if for_save_to_session:
data = json.loads(response.content)
data.update(for_save_to_session)
response.content = json.dumps(data)
except Exception as e:
msg = f'ResponseInterceptionMiddleware error = {str(e)}'
print(msg)
# if 'errors' in response.data:
# response.data.update({'success': False})
# print(response.data)
return response return response
# def process_view(self, request, view_func, *view_args, **view_kwargs):
#
# if request.user.is_authenticated and request.body:
# for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# if for_save_to_session:
# data = json.loads(request.body)
# data.update(for_save_to_session)
#
# # request_data = getattr(request, '_body', request.body)
# # request_data = json.loads(request_data)
# # # here you can write the logic to append the payload to request data
# request._body = json.dumps(data)
# return None
# def __call__(self, request):
# # Code to be executed for each request before
# # the view (and later middleware) are called.
#
# if request.user.is_authenticated and request.body:
# for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# if for_save_to_session:
# data = json.loads(request.body)
# data.update(for_save_to_session)
# request._body = json.dumps(data)
# # return JsonResponse(data)
# # request = request.user.user_profile.save_user_alerts_to_session(request)
#
# response = self.get_response(request)
# # if request.user.is_authenticated:
# # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# # if for_save_to_session:
# # for key, val in for_save_to_session.items():
# # set_cookie(response, key, json.dumps(val), 30)
#
# # Code to be executed for each request/response after
# # the view is called.
#
# return response

View File

@@ -25,27 +25,29 @@ def registration_View(request):
@login_required(login_url='/profile/login/') @login_required(login_url='/profile/login/')
def chat_w_user_View(request, user_id=None): def chat_w_user_View(request, user_id=None):
from ChatServiceApp.funcs import get_chat_receivers_for_user, get_msgs_for_chat_w_users from ChatServiceApp.funcs import get_chat_page_content_Dict
receivers = get_chat_receivers_for_user(request.user) # receivers = get_chat_receivers_for_user(request.user)
cur_chat_msgs = None Dict = get_chat_page_content_Dict(request, user_id)
try: # cur_chat_msgs = None
cur_receiver = User.objects.get(id=user_id) #
if not cur_receiver in receivers: # try:
receivers.insert(0, cur_receiver) # cur_receiver = User.objects.get(id=user_id)
cur_chat_msgs = get_msgs_for_chat_w_users(request.user, cur_receiver) # if not cur_receiver in receivers:
except User.DoesNotExist: # receivers.insert(0, cur_receiver)
cur_receiver = None # cur_chat_msgs = get_msgs_for_chat_w_users(request.user, cur_receiver)
# except User.DoesNotExist:
# cur_receiver = None
Dict = { #
'page': 'chat', #
'cur_receiver': cur_receiver, # Dict = {
'receivers': receivers, # 'page': 'chat',
'messages':cur_chat_msgs # 'cur_receiver': cur_receiver,
} # 'receivers': receivers,
# 'messages':cur_chat_msgs
# }
t = loader.get_template('pages/profile/p_user_profile.html') t = loader.get_template('pages/profile/p_user_profile.html')
return HttpResponse(t.render(Dict, request)) return HttpResponse(t.render(Dict, request))

View File

@@ -2,6 +2,30 @@ from .models import *
from django.db.models import Q from django.db.models import Q
def get_chat_page_content_Dict(request, receiver_id=None):
from AuthApp.models import User
msgs = []
try:
cur_receiver = User.objects.get(id=receiver_id)
msgs = get_msgs_for_chat_w_users(request.user, cur_receiver)
msgs.filter(receiver=request.user).update(status='seen')
except User.DoesNotExist:
cur_receiver = None
receivers = get_chat_receivers_for_user(request.user)
Dict = {
'cur_receiver': cur_receiver,
'messages': msgs,
'receivers': receivers,
'page': 'chat',
}
return Dict
def get_msgs_for_chat_w_users(user1, user2): def get_msgs_for_chat_w_users(user1, user2):
msgs = Message.objects.filter( msgs = Message.objects.filter(
@@ -12,17 +36,35 @@ def get_msgs_for_chat_w_users(user1, user2):
return msgs return msgs
def get_chat_receivers_for_user(user): def get_chat_receivers_for_user(user):
receivers = Message.objects.filter( msgs = Message.objects.filter(
Q(sender=user) | Q(receiver=user), Q(sender=user) | Q(receiver=user),
group=None group=None
).order_by('-modifiedDT')#.select_related('sender', 'receiver').values('sender', 'receiver').distinct() ).order_by('-modifiedDT')#.select_related('sender', 'receiver').values('sender', 'receiver').distinct()
receivers_list = [] receivers_list = []
receivers_list.extend((item.sender for item in receivers if item.sender != user))
receivers_list.extend((item.receiver for item in receivers if item.receiver != user))
return list(set(receivers_list)) for msg in msgs:
if msg.receiver not in receivers_list and msg.receiver != user:
msg.receiver.unread_msgs_count = 0
msg.receiver.last_msg = msg.text
receivers_list.append(msg.receiver)
if msg.sender not in receivers_list and msg.sender != user:
msg.sender.unread_msgs_count = 0
receivers_list.append(msg.sender)
msg.sender.last_msg = msg.text
if msg.receiver == user:
if msg.status == 'sended':
i = receivers_list.index(msg.sender)
receivers_list[i].unread_msgs_count += 1
return receivers_list
# receivers_list.extend((item.sender for item in receivers if item.sender != user))
# receivers_list.extend((item.receiver for item in receivers if item.receiver != user))
#
# return list(set(receivers_list))
def get_messages_for_ticket(ticket): def get_messages_for_ticket(ticket):
return ticket.rel_messages_for_group.filter(enable=True).order_by('-modifiedDT') return ticket.rel_messages_for_group.filter(enable=True).order_by('-modifiedDT')

View File

@@ -25,17 +25,21 @@ def show_chat_w_user_ajax(request):
try: try:
data = json.loads(request.body) data = json.loads(request.body)
Dict = get_chat_page_content_Dict(request, data['user_id'])
from AuthApp.models import User # from AuthApp.models import User
cur_receiver = User.objects.get(id=data['user_id']) # cur_receiver = User.objects.get(id=data['user_id'])
#
receivers = get_chat_receivers_for_user(request.user) # receivers = get_chat_receivers_for_user(request.user)
#
Dict = { # msgs = get_msgs_for_chat_w_users(request.user, cur_receiver)
'cur_receiver': cur_receiver, # msgs.filter(receiver=request.user).update(status='seen')
'messages': get_msgs_for_chat_w_users(request.user, cur_receiver), #
'receivers': receivers, # Dict = {
} # 'cur_receiver': cur_receiver,
# 'messages': msgs,
# 'receivers': receivers,
# }
tpl_name = 'blocks/profile/b_chats.html' tpl_name = 'blocks/profile/b_chats.html'

View File

@@ -7,9 +7,11 @@
</div> </div>
<div class="center-part-tab-user"> <div class="center-part-tab-user">
<span class="user_name_messenger">{{ item.last_name }} {{ item.first_name }}</span> <span class="user_name_messenger">{{ item.last_name }} {{ item.first_name }}</span>
<span class="last-message-messenger-user-tab">{{ item.id }}</span> <span class="last-message-messenger-user-tab">{{ item.last_msg }}</span>
</div>
<div class="right-part-tab-user">
<div class="cost-messages-in-user-tab-messenger"><span>1</span></div>
</div> </div>
{% if item.unread_msgs_count %}
<div class="right-part-tab-user">
<div class="cost-messages-in-user-tab-messenger"><span>{{ item.unread_msgs_count }}</span></div>
</div>
{% endif %}
</div> </div>