diff options
Diffstat (limited to 'chat_api')
| -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 |
5 files changed, 66 insertions, 5 deletions
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 | ||
