API weiter
This commit is contained in:
parent
f4f9f197ce
commit
a00710e04c
|
|
@ -2,6 +2,7 @@ from django.contrib.auth.models import User
|
|||
from rest_framework import serializers
|
||||
from rest_framework.validators import UniqueTogetherValidator
|
||||
from standards.models import Standards
|
||||
from chat.models import ChatRoom, ChatMessage
|
||||
|
||||
class StandardsSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
|
@ -17,3 +18,37 @@ class StandardsSerializer(serializers.ModelSerializer):
|
|||
|
||||
def getFormatedLastModified(self, standard):
|
||||
return standard.last_modified_on.strftime("%d.%m.%Y %H:%M")
|
||||
|
||||
|
||||
class ChatRoomSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = ChatRoom
|
||||
fields = ["id", "roomname", "roomname_channel"]
|
||||
|
||||
class ChatMessageSerializer(serializers.ModelSerializer):
|
||||
sendtime = serializers.SerializerMethodField('getFormatedMessageTimeStarted')
|
||||
|
||||
class Meta:
|
||||
model = ChatMessage
|
||||
fields = ["author", "content", "sendtime"]
|
||||
|
||||
|
||||
class ChatRoomFullSerializer(serializers.ModelSerializer):
|
||||
|
||||
chatroom_createddate = serializers.SerializerMethodField('getFormatedChatStarted')
|
||||
#messages = ChatMessageSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = ChatRoom
|
||||
fields = ["id", "roomname", "roomname_channel", "chatroom_createddate", "chatmembers", "chatmember_single","messages", "creator"]
|
||||
depth = 2
|
||||
|
||||
def getFormatedChatStarted(self, chatroom):
|
||||
return chatroom.chatroom_createddate.strftime("%d.%m.%Y %H:%M")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,11 +1,14 @@
|
|||
from django.urls import path
|
||||
from .views import HelloView
|
||||
from .views import GetUserId
|
||||
from . import views
|
||||
|
||||
app_name = 'api'
|
||||
urlpatterns = [
|
||||
path('helloview/', HelloView.as_view(), name='api-helloview'),
|
||||
path('getuserid/', GetUserId.as_view(), name='api-getuserid'),
|
||||
path('getstandards/', views.getStandardList, name='api-getstandards'),
|
||||
path('getsinglestandard/<int:pk>', views.getSingleStandard, name='api-getsinglestandards'),
|
||||
|
||||
path('logout/', views.logoutByToken, name='api-logout'),
|
||||
path('getchatrooms/', views.getchatrooms, name='api-getchatrooms'),
|
||||
path('getsinglechat/<int:pk>', views.getsinglechat, name='api-getsinglechat'),
|
||||
path('chatnewmessage/', views.savenewchatmessage, name='api-savechatmessage'),
|
||||
]
|
||||
71
api/views.py
71
api/views.py
|
|
@ -4,40 +4,18 @@ from rest_framework.permissions import IsAuthenticated # <-- Here
|
|||
import json
|
||||
from standards.models import Standards
|
||||
from rest_framework import serializers
|
||||
from .serializers import StandardsSerializer
|
||||
from .serializers import StandardsSerializer, ChatRoomSerializer, ChatRoomFullSerializer
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework import status
|
||||
from rest_framework.authentication import SessionAuthentication, BasicAuthentication, TokenAuthentication
|
||||
from rest_framework.decorators import authentication_classes
|
||||
from chat.models import ChatRoom, ChatMessage
|
||||
|
||||
class HelloView(APIView):
|
||||
class GetUserId(APIView):
|
||||
permission_classes = (IsAuthenticated,) # <-- And here
|
||||
|
||||
def post(self, request):
|
||||
content = {'message': 'Hello, World!'}
|
||||
return Response(content)
|
||||
|
||||
'''
|
||||
class GiveMeStandards(APIView):
|
||||
|
||||
|
||||
def post(self, request):
|
||||
standards = Standards.objects.filter(agency=request.user.profile.agency)
|
||||
|
||||
content = {}
|
||||
i = 0
|
||||
for s in standards:
|
||||
content.update({i : s.name.encode("utf-8")})
|
||||
i += 1
|
||||
|
||||
content = {'standards': content}
|
||||
return Response(content)
|
||||
|
||||
|
||||
def post(self, request):
|
||||
ser = StandardsSerializer(data=Standards.objects.filter(agency=self.request.user.profile.agency))
|
||||
return Response(ser)
|
||||
'''
|
||||
return Response({"userid" : self.request.user.pk})
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes((IsAuthenticated,))
|
||||
|
|
@ -52,3 +30,44 @@ def getSingleStandard(request, pk):
|
|||
standard = Standards.objects.get(pk=int(pk))
|
||||
ser = StandardsSerializer(standard, many=False)
|
||||
return Response(ser.data, status=status.HTTP_200_OK)
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes((IsAuthenticated,))
|
||||
def logoutByToken(request):
|
||||
print(request)
|
||||
request.user.auth_token.delete()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes((IsAuthenticated,))
|
||||
def getchatrooms(request):
|
||||
chatrooms = ChatRoom.objects.filter(creator=request.user) | ChatRoom.objects.filter(chatmember_single=request.user)
|
||||
chatrooms_ser = ChatRoomSerializer(chatrooms, many=True)
|
||||
return Response(chatrooms_ser.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes((IsAuthenticated,))
|
||||
def getsinglechat(request, pk):
|
||||
chatroom = ChatRoom.objects.get(pk=pk)
|
||||
if chatroom.creator == request.user or chatroom.chatmember_single == request.user or (request.user in chatroom.chatmembers.all()):
|
||||
chatroom_ser = ChatRoomFullSerializer(chatroom, many=False)
|
||||
return Response(chatroom_ser.data, status=status.HTTP_200_OK)
|
||||
else:
|
||||
return Response(status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes((IsAuthenticated,))
|
||||
def savenewchatmessage(request):
|
||||
room = ChatRoom.objects.get(pk=request.POST["room"])
|
||||
if(request.user == room.creator or request.user == room.chatmember_single):
|
||||
newmessage = ChatMessage(room=room, author=request.user, content=request.POST["message"])
|
||||
newmessage.save()
|
||||
room.messages.add(newmessage)
|
||||
room.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
else:
|
||||
return Response(status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -54,3 +54,5 @@ class ChatRoom(models.Model):
|
|||
return f'{self.roomname}'
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ $(document).ready(function(){
|
|||
}
|
||||
|
||||
chatwebsocket.onmessage = function(e) {
|
||||
|
||||
|
||||
datainfo = e["data"].split("__");
|
||||
if(datainfo[0] == "starttyping")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -137,7 +137,6 @@
|
|||
},
|
||||
success: function( data )
|
||||
{
|
||||
console.log(data);
|
||||
counter = 0;
|
||||
$( ".status-circle" ).each(function( index ) {
|
||||
if(data["user_online_final"].indexOf($(this)[0]["id"].split("_")[2]) !== -1){
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -14,6 +14,7 @@ from datetime import datetime, timedelta
|
|||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
||||
############################################## DEV #####################################
|
||||
BASE_URL = "https://dev01.digitale-agentur.com/"
|
||||
CRONAPIKEY = "gCddsaz6NOnE9QbXZM5LasdEk122D"
|
||||
|
|
|
|||
|
|
@ -6,9 +6,12 @@ from channels_presence.decorators import touch_presence, remove_presence
|
|||
from channels_presence.models import Presence
|
||||
import channels
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework.authtoken.models import Token
|
||||
|
||||
|
||||
class UsersConsumer(WebsocketConsumer):
|
||||
|
||||
appconnect = False
|
||||
'''
|
||||
|
||||
CONNECT A WEBSOCKET
|
||||
|
|
@ -20,14 +23,31 @@ class UsersConsumer(WebsocketConsumer):
|
|||
|
||||
def connect(self):
|
||||
super().connect()
|
||||
pathcheck = self.scope["path"].split("/")
|
||||
loggeduser = ""
|
||||
# CHECK IF SOCKET COMES FROM APP OR FROM WEB
|
||||
#APP
|
||||
if(len(pathcheck) == 7 and len(pathcheck[5]) > 0):
|
||||
loggeduser = User.objects.get(pk=Token.objects.get(key=pathcheck[5]).user_id)
|
||||
self.appconnect = True
|
||||
else:
|
||||
loggeduser = self.scope["user"]
|
||||
|
||||
Presence.objects.touch(self.channel_name)
|
||||
Room.objects.add("agency_" + str(loggeduser.profile.agency.pk), self.channel_name, self.scope["user"])
|
||||
Room.objects.add("agency_" + str(loggeduser.profile.agency.pk), self.channel_name, loggeduser)
|
||||
|
||||
def disconnect(self, close_code):
|
||||
if(not self.appconnect):
|
||||
loggeduser = self.scope["user"]
|
||||
Room.objects.remove("agency_" + str(loggeduser.profile.agency.pk), self.channel_name)
|
||||
Presence.objects.touch(self.channel_name)
|
||||
else:
|
||||
pathcheck = self.scope["path"].split("/")
|
||||
loggeduser = User.objects.get(pk=Token.objects.get(key=pathcheck[5]).user_id)
|
||||
loggeduser = self.scope["user"]
|
||||
Room.objects.remove("agency_" + str(loggeduser.profile.agency.pk), self.channel_name)
|
||||
Presence.objects.touch(self.channel_name)
|
||||
|
||||
|
||||
'''
|
||||
def receive(self, text_data):
|
||||
|
|
@ -58,7 +78,7 @@ class UsersConsumer(WebsocketConsumer):
|
|||
self.send("presence_update")
|
||||
|
||||
|
||||
class UsersChat(UsersConsumer):
|
||||
class UsersChat(WebsocketConsumer):
|
||||
|
||||
'''
|
||||
|
||||
|
|
@ -71,14 +91,26 @@ class UsersChat(UsersConsumer):
|
|||
|
||||
def connect(self):
|
||||
super().connect()
|
||||
pathcheck = self.scope["path"].split("/")
|
||||
loggeduser = ""
|
||||
|
||||
# CHECK IF SOCKET COMES FROM APP OR FROM WEB
|
||||
#APP
|
||||
if(len(pathcheck) == 7 and len(pathcheck[5]) > 0):
|
||||
loggeduser = User.objects.get(pk=Token.objects.get(key=pathcheck[5]).user_id)
|
||||
self.appconnect = True
|
||||
print("APP CONNECTED IN USERS CHAT")
|
||||
else:
|
||||
loggeduser = self.scope["user"]
|
||||
|
||||
roomname = "privatechat_" + str(self.scope["url_route"]["kwargs"]["creator"]) + "_" + str(self.scope["url_route"]["kwargs"]["single"])
|
||||
Room.objects.add(roomname, self.channel_name, self.scope["user"])
|
||||
Room.objects.add(roomname, self.channel_name, loggeduser)
|
||||
|
||||
def disconnect(self, close_code):
|
||||
Room.objects.remove("", self.channel_name)
|
||||
|
||||
# WEBSOCKET-DATA-CONTENT
|
||||
|
||||
def receive(self, text_data=None, bytes_data=None):
|
||||
datainfo = text_data.split("__")
|
||||
typinguserid = datainfo[1]
|
||||
|
|
@ -102,3 +134,15 @@ class UsersChat(UsersConsumer):
|
|||
|
||||
def reloadmessages(self, event):
|
||||
self.send("reloadmessages")
|
||||
|
||||
# UPDATET STANDARD
|
||||
def update_standard(self, event):
|
||||
self.send("standard_update")
|
||||
|
||||
# NEW AGENCY NEWS
|
||||
def agency_newnews(self, event):
|
||||
self.send("Neue Agenturnews!")
|
||||
|
||||
# SOMETHING IN PRESENCE CHANGED
|
||||
def update_presence_live(self, event):
|
||||
self.send("presence_update")
|
||||
|
|
@ -3,6 +3,7 @@ from django.urls import re_path
|
|||
from . import mainwebsocket
|
||||
|
||||
websocket_urlpatterns = [
|
||||
re_path(r'ws/chat/(?P<creator>\w+)/(?P<single>\w+)/$', mainwebsocket.UsersChat),
|
||||
re_path('ws/', mainwebsocket.UsersConsumer),
|
||||
re_path(r'ws/chat/(?P<creator>\w+)/(?P<single>\w+)/$', mainwebsocket.UsersChat, name="ws-chat"),
|
||||
re_path(r'ws/appchat/(?P<creator>\w+)/(?P<single>\w+)/(?P<token>\w+)/$', mainwebsocket.UsersChat, name="ws-appchat"),
|
||||
re_path(r'ws/', mainwebsocket.UsersConsumer, name="ws-default"),
|
||||
]
|
||||
Loading…
Reference in New Issue