From baf8e5e82e9d0cdb53df57b8e618c67e7e90a9af Mon Sep 17 00:00:00 2001 From: emile Date: Fri, 20 Sep 2024 21:59:48 +0300 Subject: [PATCH] new --- osinaweb/db.sqlite3 | Bin 1974272 -> 1974272 bytes .../__pycache__/consumers.cpython-310.pyc | Bin 17964 -> 18353 bytes .../api/__pycache__/urls.cpython-310.pyc | Bin 362 -> 475 bytes .../api/__pycache__/views.cpython-310.pyc | Bin 3236 -> 4028 bytes osinaweb/osichat/api/urls.py | 1 + osinaweb/osichat/api/views.py | 84 +++++++++++------- osinaweb/osichat/consumers.py | 11 ++- 7 files changed, 56 insertions(+), 40 deletions(-) diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 411f050be818298724b47e7a23dc192d7c11f88f..c65798313bc6c97941eaf1a53fe6422e7efed1d8 100644 GIT binary patch delta 12949 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 PPzo=Z#hpnP9~b@`VZ(n* delta 15767 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

p}R){-n+eWZZ)hlpA zdKlXo-~-Ko0mA;3IiYSgu@_c2NlMcOumcsE7_8XwXKZv; zE3KfLTkMq;J-G^#S*aPo3XS0S0<;ej;RRv9->#s>*E=g3a>2W(P%?}aJQ6xrWzxR3 zZ&s|-0nfiei@L0E9M^#(U+UGGK3L&!73PZO+pEno%A2tLr~sgvT^!(5eY1i$BpaxR zRml}?gr*4%xhzgv-4`nz=e}WAkTkCfZgiXiK(DChShDb|`eH>7qvKeGsmoPzg>%s8 z6_Q`5Ruu=hvJY0MeIOTx%9f17#}#{!9zR3D7s{tBF}&8#8>tT zU$A#n6epb$E4NnLJ1cmKFnD@t`CVI&Mri3?N4#554qX!}mLHo4%TG@lm4$3<`SAq> z3KYL^s;RjAZbtu@2WFg@@Lk3&if}m{SJ977~9MOAoA>C@5A*3;ml} zBra_mHI?ELv$HZiT5t#itHNNB^iyOQwi3B&M4hGdWS4suq?ca7BEtWpi(O&C-9~T{ z0rslsuX0`NWJvFvr~yY1R$3%?ZzV8ruKFCQ)R5& vQzN~yf>PJ;*F#8+R%#9wYr#~aTYfKzf6rOWucXoDnW?!(tZlSPHqT5uUJX)|Tt$?K37-E}h`hbW~Cn8rAh``vTy zJ?FdUo^xhSAA|Yh;2Tm^kATmaPp|gAbY$K)C zXsYJZxAGk>jf3f;?u1}E^(S!6nbkcBVbDPZ+(F3{G`|thg4Bz;GD(aORVN7bO#lc~ z*dZ8s)Ne{OFhNFT+jg4U5-tCJBz@L&YGE6-{6RocnFc2vGq6Gs53$)m2kd7z14p5N znZZ^VW*-KR6>h*w1;7X85CS3+kpA*GWC&S%L%T$H-#Q!qg1~odyyyayS&v1!0Yo+z zodU($w#p3W=}|vxU+rAS_w-IV7yLF#_s~RKa)^E&RGLMcC%@SEb#~ zo&!mPeO3MgJjy<)sD%)_Rj~`+VI6B?FlY_0ktJsaIx|t0+!(c9TiY$d9J~8K5n2>f zorigLvFa#1ZFN zX8+P0pwgrRv+PO;Mo=S~i2g8vl{H<{p&3D^RHp7DSg|$%D=6{04LbS+Tj~?AGGd!B zw(sFlH-_NGmhc#Prki@HFfNXIO}Cams+fxYim6}-m=YWXI12US9JQj{tVMVYu?-xi zhpN~dUj0qet3^%k^r{)uv|{R;6mieL)IwRwl&4Ef&&(Kh%y2*Ee6>-kmC=AHWt%}X zVl;#um6z)%w2*23A);S2%4yhi(gN%))%Kg_ekv`TB-lbL9xz=&i*O}^UW@1z&3O$* zOrqb$EUwXSwByFABBnp2agFzGl+hRF^g4zu<_8CF|Y zG8T8~BgkPN{XLg1BV?4ck?id~tPk}b>`&>7e7y!CPBNsb#`cKt#Vka*hbPg0Fm3b< z4IFOXjv=N4xF`w4CH*OZ1RikQk^UZO=tv*rHm&%HY#$mLsA88Jf=yM4{-K^^f4Uik z97o1AkQ(St>FG?Ee@_FcbUN9WN*YG8=fFT}(9ka-KkKNA!5KDOcL*%@ZC!_0sXxP# zEk)6GTWBg~*P0{F50LXM>u%G`zbP)U*-f=b@y(`c_>C!v`{MTy{YR55 z@=bNkH4|ct|7;aj=&E?!|{g(aN zyX_>ZXkFP-2~zgtYb@0AApFW6Z&`=iBQ5PvX`OG`2GGdVwl`oan{Nw4m-Sg&H;C=| G?f(G9C(p0| delta 1409 zcmZuvYiJx*6rOV@J3IS+Ws}`BO|qM$Wu>ICY0{X7rr9P2Ed)`hAzImH@|rY>-W?E@ z*(@eM^hcwu2Q<(PZ0OI1N*s-dpcO+AsvuGnA_|deYf+S{ASmj&yLl9GhWXC>n|seW zYp=lSIq=SUJWh!o$K1`axfj;F%Rcx6AFC+GtG*|4PZ=(gEkM>Tr0&)|3t-wcwM#N> ze1LqmqV4FCX38{)BBYs;?lpY6UvrY}$}=ONxfhw{Sp<+Y>2b*jYF<;(e2XlrmU0Us zm+2wmDiXvZRyi&`7-LN(j|>cS-UBpke)uCRjFE~={XEPwb8Cg3v$+J zs(K*nGF?1v3O<(}q%TBYIiD7&hj*l2k(&Wc(o~{$6i4gi^QKd;G@XUWibPsebLM4= zxwaResG0UcmFZZaaXojyhpfo1rH~cf zv9^EpzkgzhDvY%pQdY&JhVaRjn##@a$VAGR9!;lH_8Olq@ z{38;Z>SX$v$!SXB*F?4OaSLx8or1Tpr*#nGc)qp4Rb=iHF%>sjW5+h_?pq_{LKQ2yti?GTQ_)cxUHV?AMoY22b2~jN$CuJ+E(jT znF``{{#B-^%uJQ0Q9=d*ULre*AQ4?0s~}YCPTJ!DR12_9wH>_BKK(^dr8W?0{eJ y^W-6__$S#9A*=tyqW}l+)xJxW4+D*$ibz$7+TWjrf3?nq~sRsS8UG)v2jJw3G~9;h*j2gHEsjp73FAljpZz`Em+bx*w5Eg}GP RBo6}*BNq!7BLs5%1^~=uJZ=C0 delta 115 zcmcc3{EA6CpO=@50SNY)9#2~Uq#uJg$bbdNaRB0ClZo2;T2Yj s%QA~IOY)0~_5FYXceHqU(o;*~VS?F^06xDM!2kdN diff --git a/osinaweb/osichat/api/__pycache__/views.cpython-310.pyc b/osinaweb/osichat/api/__pycache__/views.cpython-310.pyc index 8e83b663d1524dbcb6d2a9ad7d09e99ed4cfaef4..431f7df2bb72921e70d6a08fc2e37a255ef456ad 100644 GIT binary patch literal 4028 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 M1LmML(P|<53x^4H-T(jq diff --git a/osinaweb/osichat/api/urls.py b/osinaweb/osichat/api/urls.py index 93d9631d..49c57d88 100644 --- a/osinaweb/osichat/api/urls.py +++ b/osinaweb/osichat/api/urls.py @@ -4,6 +4,7 @@ from . import views urlpatterns = [ path('chat-rooms/', views.get_chat_rooms), + path('dms/', views.get_dms), path('visitors/', views.get_visitors), path('staffs/', views.get_staffs), path('start-conversation/', views.start_conversation), diff --git a/osinaweb/osichat/api/views.py b/osinaweb/osichat/api/views.py index 5466cb7c..8d36c3c6 100644 --- a/osinaweb/osichat/api/views.py +++ b/osinaweb/osichat/api/views.py @@ -15,6 +15,21 @@ def get_chat_rooms(request): +@api_view(['GET']) +def get_dms(request): + try: + token_data = verify(request.headers.get("Authorization")) + user_id = token_data['userid'] + user = User.objects.get(id=user_id) + chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).filter(chatmember__member=user).order_by('-last_update', '-date_created') + chat_rooms_serializer = ChatRoomSerializer(chat_rooms, many=True) + return successRes(chat_rooms_serializer.data) + except TokenError as terr: + return errorRes(msg=str(terr), status=450) + except Exception as e: + return errorRes(str(e)) + + @api_view(['GET']) def get_visitors(request): start_date = request.query_params.get("start_date") @@ -87,43 +102,44 @@ def start_conversation(request): start_with_id = request.data.get('start_with') start_with = get_object_or_404(User, id=start_with_id) - existing_room = ChatRoom.objects.filter( - chatmember__member=user - ).annotate( - member_count=Count('chatmember') - ).filter( - member_count=2, - chatmember__member=start_with - ).first() - - if existing_room: - return successRes({'room_id': existing_room.id}) - - chat_title = ( - f"Chat created by {user.first_name} {user.last_name} " - f"with {start_with.first_name} {start_with.last_name} " - f"on {timezone.now()}" - ) - - room = ChatRoom.objects.create( - name=chat_title, - created_by=user, - date_created=timezone.now(), - ) - - ChatMember.objects.create( - member=user, - room=room, - date_joined=timezone.now() - ) - ChatMember.objects.create( - member=start_with, - room=room, - date_joined=timezone.now() + existing_chat_room = ( + ChatRoom.objects.annotate(member_count=Count('chatmember')) + .filter(member_count=2) + .filter(chatmember__member=user) + .filter(chatmember__member=start_with) + .distinct() + .first() ) + if existing_chat_room: + return successRes({'room_id': existing_chat_room.id}) + + else: + chat_title = ( + f"Chat created by {user.first_name} {user.last_name} " + f"with {start_with.first_name} {start_with.last_name} " + f"on {timezone.now()}" + ) + + room = ChatRoom.objects.create( + name=chat_title, + created_by=user, + date_created=timezone.now(), + ) + + ChatMember.objects.create( + member=user, + room=room, + date_joined=timezone.now() + ) + ChatMember.objects.create( + member=start_with, + room=room, + date_joined=timezone.now() + ) + + return successRes({'room_id': room.id}) - return successRes({'room_id': room.id}) except TokenError as terr: return errorRes(msg=str(terr), status=450) diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index d0e13e46..de1ad0f7 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -161,7 +161,8 @@ class Osichat(WebsocketConsumer): } if self.client_type == 'mobile_admin': chat_room_data = model_to_dict(chat_room) - chat_room_data['visitor'] = model_to_dict(chat_room.chatroomguest.visitor) + if hasattr(chat_room, 'chatroomguest') and chat_room.chatroomguest.visitor: + chat_room_data['visitor'] = model_to_dict(chat_room.chatroomguest.visitor) if last_message: chat_room_data['last_message'] = model_to_dict(last_message) else: @@ -352,7 +353,7 @@ class OsitcomChatRoom(WebsocketConsumer): ) if self.chat_room: - self.group = f"{self.session_id}_{self.chat_room.id}" + self.group = f"chat_{self.chat_room.id}" else: self.group = self.session_id #Visitor hasn't started a chat yet, when he will we will remove him from this group and add it to the chat group @@ -580,15 +581,13 @@ class OsitcomChatRoom(WebsocketConsumer): if self.client_type == 'mobile_admin': chat_room_data = model_to_dict(chat_room) - if hasattr(chat_room, 'chatroomguest'): + if hasattr(chat_room, 'chatroomguest') and chat_room.chatroomguest.visitor: chat_room_data['visitor'] = { 'id': chat_room.chatroomguest.visitor.id, 'country_flag': chat_room.chatroomguest.visitor.flag_image_url, 'is_online': chat_room.chatroomguest.visitor.is_online, 'ip': chat_room.chatroomguest.visitor.ip_address, } - else: - chat_room_data['visitor'] = None chat_members = ChatMember.objects.filter(room=chat_room) if chat_members.exists(): @@ -597,7 +596,7 @@ class OsitcomChatRoom(WebsocketConsumer): 'id': member.member.id, 'first_name': member.member.first_name, 'last_name': member.member.last_name, - 'image': member.member.staffprofile.image, + 'image': member.member.staffprofile.image.url, } for member in chat_members ]