def sendMessage(request): if request.method == 'POST': data = request.data if data.get('sessionToken') == None or data.get( 'target') == None or data.get('body') == None: return Response( { 'error': "Invalid body parameter, body must contain 'sessionToken', 'body' and 'target'" }, status=status.HTTP_400_BAD_REQUEST) sessionToken = data.get('sessionToken') target = data.get('target') body = data.get('body') sessionTokenValid, user = sessionIsValid(sessionToken) usernameValid, recipient = usernameisValid(target) if sessionTokenValid and usernameValid: message = MessageModel.objects.create(user=user, recipient=recipient, body=body) serializer = MessageModelSerializer(message).data return Response(serializer, status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_200_OK)
def getMessage(request): if request.method == 'POST': data = request.data if data.get('sessionToken') == None or data.get('messageID') == None: return Response( { 'error': "Invalid body parameter, body must contain 'sessionToken' and 'messageID'" }, status=status.HTTP_400_BAD_REQUEST) sessionToken = data.get('sessionToken') messageID = data.get('messageID') sessionTokenValid, user = sessionIsValid(sessionToken) if sessionTokenValid: msg = MessageModel.objects.get( Q(user=user, pk=messageID) | Q(recipient=user, pk=messageID)) serializer = MessageModelSerializer(msg) return Response(serializer.data, status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_200_OK)
def chatHistory(request): #using seek pagation. page_size = 15 if request.method == 'POST': data = request.data if data.get('sessionToken') == None or data.get('target') == None: return Response( { 'error': "Invalid body parameter, body must contain 'sessionToken' and 'target' with optional arguments 'limit' and 'before_id'" }, status=status.HTTP_400_BAD_REQUEST) sessionToken = data.get('sessionToken') target = data.get('target') page_size = 30 #IMP_CONSTANT if data.get('limit') == None: limit = page_size else: limit = int(data.get('limit')) if limit > page_size: limit = page_size if data.get('before_id') == None: before_id = False else: before_id = int(data.get('before_id')) sessionTokenValid, user = sessionIsValid(sessionToken) usernameValid, recipient = usernameisValid(target) if sessionTokenValid and usernameValid: if before_id == False: msg = MessageModel.objects.all().filter( Q(recipient=recipient, user=user) | Q(user=recipient, recipient=user)).order_by( '-pk')[:limit:-1] else: msg = MessageModel.objects.all().filter( Q(recipient=recipient, user=user) | Q(user=recipient, recipient=user)).filter( pk__lt=before_id).order_by('-pk')[:limit:-1] serializer = MessageModelSerializer(msg, many=True) return Response(serializer.data, status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_200_OK)
def messageSeen(request): if request.method == 'POST': data = request.data if data.get('session_token') == None or data.get( 'target') == None or data.get('upto_id') == None: return Response( { 'error': "Invalid body parameter, body must contain 'session_token', 'target' and 'upto_id'" }, status=status.HTTP_400_BAD_REQUEST) session_token = data.get('session_token') upto_id = data.get('upto_id') target = data.get('target') sessionValid, user = sessionIsValid(session_token) usernameValid, recipient = usernameisValid(target) if sessionValid and usernameValid: msgs = MessageModel.objects.all().filter( Q(recipient=recipient, user=user) | Q(user=recipient, recipient=user)).filter( pk__lte=upto_id, seen=False).order_by('pk') #print(msgs) for msg in msgs: msg.seen = True msg.save() notification = { 'type': 'push_seen', 'chat': user.username, 'seen': True, 'upto_id': '{}'.format(upto_id) } channel_layer = get_channel_layer() #async_to_sync(channel_layer.group_send)("{}".format(user.username), notification) async_to_sync(channel_layer.group_send)("{}".format( recipient.username), notification) return Response(status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_200_OK)
def messageLike(request): if request.method == 'POST': data = request.data if data.get('sessionToken') == None or data.get( 'messageID') == None or data.get('liked') == None: return Response( { 'error': "Invalid body parameter, body must contain 'sessionToken', 'liked' and 'messageID'" }, status=status.HTTP_400_BAD_REQUEST) sessionToken = data.get('sessionToken') messageID = data.get('messageID') liked = data.get('liked') sessionTokenValid, user = sessionIsValid(sessionToken) if sessionTokenValid: try: msg = MessageModel.objects.get( Q(user=user, pk=messageID) | Q(recipient=user, pk=messageID)) except: return Response( { 'error_header': 'Message not found', 'error_body': "No such message exists or you are not authorised to access this message.", "actions": [{ "error_code": "1001", 'error_message': 'Understood' }] }, status=status.HTTP_200_OK) #print(msg) if liked == "True" or liked == True or liked == 1 or liked == "1": msg.liked = True msg.save() obj, created = likedStream.objects.update_or_create( message=msg, defaults={ "message": msg, "user": user, "state": True }, ) #print(obj, created) else: msg.liked = False msg.save() obj, created = likedStream.objects.update_or_create( message=msg, defaults={ "message": msg, "user": user, "state": False }, ) #print(obj, created) return Response(status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_200_OK)
def chatUsers(request): if request.method == 'POST': data = request.data if data.get('sessionToken') == None: return Response( { 'error': "Invalid body parameter, body must contain 'sessionToken' and optional agument 'limit'" }, status=status.HTTP_400_BAD_REQUEST) sessionToken = data.get('sessionToken') if data.get('limit') != None: limit = int(data.get('limit')) else: limit = 15 sessionTokenValid, user = sessionIsValid(sessionToken) print(sessionTokenValid) if sessionTokenValid == False: return Response(status=status.HTTP_403_FORBIDDEN) if sessionTokenValid == True: #latest_users = MessageModel.filter(user=user).latest('pk').values('recipient').order_by('pk') latest_users = list( set( MessageModel.objects.filter(user=user).values_list( 'recipient', flat=True).order_by('pk')))[:limit] allData = [] for chat_user_pk in latest_users: data = {} i = user_details.objects.get(pk=chat_user_pk) data["name"] = i.name data["username"] = i.username if i.showLastsSeen: try: last_seen_obj = lastSeen.objects.get(user=i) data["showLastsSeen"] = i.showLastsSeen data["activeNow"] = last_seen_obj.activeNow data["lastSeen"] = last_seen_obj.lastSeen except: data["showLastsSeen"] = False else: data["showLastsSeen"] = i.showLastsSeen try: data["profile_picture"] = i.profile_picture.url except: data["profile_picture"] = None unseen_messages_count = 0 latest_10_messages = MessageModel.objects.all().filter( Q(recipient=i, user=user) | Q(user=i, recipient=user)).order_by('-pk')[:10:-1] for message in latest_10_messages: if message.seen == False: unseen_messages_count = unseen_messages_count + 1 if unseen_messages_count == 0: liked = likedStream.objects.all().filter( user=user, timestamp__gt=latest_10_messages[-1].timestamp).exists( ) #print(latest_10_messages[-1].timestamp) #print(liked) if liked: data["unseen_chat"] = True data["preview"] = "Liked a message" else: data["unseen_chat"] = False elif unseen_messages_count == 1: data["unseen_chat"] = True data["preview"] = latest_10_messages[-1].body elif unseen_messages_count > 9: data["unseen_chat"] = True data["preview"] = "9+ new messages" else: data["unseen_chat"] = True data["preview"] = "{} new messages".format( str(unseen_messages_count)) allData.append(data) #print(allData) #msg = MessageModel.objects.latest().filter(user=user) #serializer = MessageModelSerializer(msg, many = True) #msg = MessageModel.objects.latest().filter(user=user) return Response(allData, status=status.HTTP_202_ACCEPTED) else: return Response( { 'error_header': 'Something went wrong', 'error_body': "Something went wrong, please try again later.", "actions": [{ "error_code": "1001", 'error_message': 'Try Again' }] }, status=status.HTTP_401_UNAUTHORIZED)