diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | auth_api/views.py | 4 | ||||
| -rw-r--r-- | chat_api/admin.py | 5 | ||||
| -rw-r--r-- | chat_api/models.py | 26 | ||||
| -rw-r--r-- | chat_api/serializers.py | 8 | ||||
| -rw-r--r-- | chat_api/urls.py | 3 | ||||
| -rw-r--r-- | chat_api/views.py | 29 | ||||
| -rw-r--r-- | lom_api/urls.py | 3 |
8 files changed, 72 insertions, 9 deletions
| @@ -1,3 +1,4 @@ | |||
| 1 | db.sqlite3 | 1 | db.sqlite3 |
| 2 | venv/ | 2 | venv/ |
| 3 | __pycache__/ \ No newline at end of file | 3 | __pycache__/ |
| 4 | migrations/ \ No newline at end of file | ||
diff --git a/auth_api/views.py b/auth_api/views.py index efd98b9..cd32914 100644 --- a/auth_api/views.py +++ b/auth_api/views.py | |||
| @@ -3,7 +3,7 @@ from django.contrib.auth.models import User | |||
| 3 | from django.http.response import Http404 | 3 | from django.http.response import Http404 |
| 4 | from django.shortcuts import get_object_or_404 | 4 | from django.shortcuts import get_object_or_404 |
| 5 | 5 | ||
| 6 | from rest_framework import permissions, serializers | 6 | from rest_framework import permissions |
| 7 | from rest_framework.authtoken.serializers import AuthTokenSerializer | 7 | from rest_framework.authtoken.serializers import AuthTokenSerializer |
| 8 | from rest_framework.response import Response | 8 | from rest_framework.response import Response |
| 9 | from rest_framework.views import APIView | 9 | from rest_framework.views import APIView |
| @@ -16,7 +16,7 @@ from .serializers import UserSerializer, RegisterUserSerializer | |||
| 16 | class LoginView(KnoxLoginView): | 16 | class LoginView(KnoxLoginView): |
| 17 | permission_classes = (permissions.AllowAny, ) | 17 | permission_classes = (permissions.AllowAny, ) |
| 18 | 18 | ||
| 19 | def post(self, request, format=None): | 19 | def post(self, request): |
| 20 | token_serializer = AuthTokenSerializer(data=request.data) | 20 | token_serializer = AuthTokenSerializer(data=request.data) |
| 21 | token_serializer.is_valid(raise_exception=True) | 21 | token_serializer.is_valid(raise_exception=True) |
| 22 | user = token_serializer.validated_data['user'] | 22 | user = token_serializer.validated_data['user'] |
diff --git a/chat_api/admin.py b/chat_api/admin.py index 8c38f3f..50ad2b0 100644 --- a/chat_api/admin.py +++ b/chat_api/admin.py | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | from django.contrib import admin | 1 | from django.contrib import admin |
| 2 | from .models import * | ||
| 2 | 3 | ||
| 3 | # Register your models here. | 4 | admin.site.register(DmMessage) |
| 5 | admin.site.register(GmMessage) | ||
| 6 | admin.site.register(Group) \ No newline at end of file | ||
diff --git a/chat_api/models.py b/chat_api/models.py index 71a8362..5076d0b 100644 --- a/chat_api/models.py +++ b/chat_api/models.py | |||
| @@ -1,3 +1,27 @@ | |||
| 1 | from django.db import models | 1 | from django.db import models |
| 2 | from django.contrib.auth.models import User | ||
| 3 | from django.db.models.base import Model | ||
| 2 | 4 | ||
| 3 | # Create your models here. | 5 | class DmMessage(models.Model): |
| 6 | sender = models.ForeignKey(User, related_name="sender_dm_message", on_delete=models.CASCADE) | ||
| 7 | reciever = models.ForeignKey(User, related_name="receiver_dm_message", on_delete=models.CASCADE) | ||
| 8 | message = models.TextField(null=False) | ||
| 9 | create_date = models.DateTimeField(auto_now=True) | ||
| 10 | |||
| 11 | def __str__(self): | ||
| 12 | return str(self.sender) | ||
| 13 | |||
| 14 | class Group(models.Model): | ||
| 15 | name = models.CharField(max_length=16, null=False) | ||
| 16 | owner = models.ForeignKey(User, related_name="owner_group", on_delete=models.CASCADE) | ||
| 17 | users = models.ManyToManyField(User, related_name="users_group") | ||
| 18 | create_date = models.DateTimeField(auto_now=True) | ||
| 19 | |||
| 20 | class GmMessage(models.Model): | ||
| 21 | sender = models.ForeignKey(User, related_name="sender_gm_message", on_delete=models.CASCADE) | ||
| 22 | reciever = models.ForeignKey(Group, related_name="receiver_gm_message", on_delete=models.CASCADE) | ||
| 23 | message = models.TextField(null=False) | ||
| 24 | create_date = models.DateTimeField(auto_now=True) | ||
| 25 | |||
| 26 | def __str__(self): | ||
| 27 | return str(self.sender) \ No newline at end of file | ||
diff --git a/chat_api/serializers.py b/chat_api/serializers.py new file mode 100644 index 0000000..50d84e0 --- /dev/null +++ b/chat_api/serializers.py | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | from django.db.models import fields | ||
| 2 | from rest_framework import serializers | ||
| 3 | from .models import * | ||
| 4 | |||
| 5 | class GroupSerializer(serializers.ModelSerializer): | ||
| 6 | class Meta: | ||
| 7 | model = Group | ||
| 8 | fields = '__all__' | ||
diff --git a/chat_api/urls.py b/chat_api/urls.py index d2d839f..9fa6016 100644 --- a/chat_api/urls.py +++ b/chat_api/urls.py | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | from django.urls import path | 1 | from django.urls import path |
| 2 | from .views import GroupView | ||
| 2 | 3 | ||
| 3 | urlpatterns = [ | 4 | urlpatterns = [ |
| 4 | 5 | path('groups/', GroupView.as_view(), '') | |
| 5 | ] | 6 | ] |
diff --git a/chat_api/views.py b/chat_api/views.py index 91ea44a..f94f3a0 100644 --- a/chat_api/views.py +++ b/chat_api/views.py | |||
| @@ -1,3 +1,28 @@ | |||
| 1 | from django.shortcuts import render | 1 | from django.db.models.query import QuerySet |
| 2 | from django.http.response import Http404 | ||
| 3 | from rest_framework.response import Response | ||
| 4 | from rest_framework.serializers import Serializer | ||
| 5 | from rest_framework.views import APIView | ||
| 6 | from rest_framework import permissions | ||
| 7 | from rest_framework import generics | ||
| 8 | from knox.auth import TokenAuthentication | ||
| 2 | 9 | ||
| 3 | # Create your views here. | 10 | from django.db.models.query import Q |
| 11 | |||
| 12 | from .models import * | ||
| 13 | from .serializers import * | ||
| 14 | |||
| 15 | class GroupView(generics.ListCreateAPIView): | ||
| 16 | permission_classes = (permissions.IsAuthenticated, ) | ||
| 17 | authentication_classes = (TokenAuthentication, ) | ||
| 18 | serializer_class = GroupSerializer | ||
| 19 | |||
| 20 | def get_queryset(self): | ||
| 21 | return Group.objects.filter( | ||
| 22 | Q(owner=self.request.user) | | ||
| 23 | Q(users__in=(self.request.user, )) | ||
| 24 | ).distinct() | ||
| 25 | |||
| 26 | def create(self, request, *args, **kwargs): | ||
| 27 | request.data['owner'] = request.user.pk | ||
| 28 | return super().create(request, *args, **kwargs) \ No newline at end of file | ||
diff --git a/lom_api/urls.py b/lom_api/urls.py index 0bc8e32..64b6235 100644 --- a/lom_api/urls.py +++ b/lom_api/urls.py | |||
| @@ -18,5 +18,6 @@ from django.urls import path, include | |||
| 18 | 18 | ||
| 19 | urlpatterns = [ | 19 | urlpatterns = [ |
| 20 | path('admin/', admin.site.urls), | 20 | path('admin/', admin.site.urls), |
| 21 | path('api/auth/', include('auth_api.urls')) | 21 | path('api/auth/', include('auth_api.urls')), |
| 22 | path('api/chat/', include('chat_api.urls')), | ||
| 22 | ] | 23 | ] |
