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 | ] |