From 4979135894e955547a3565ecc99af745530c5643 Mon Sep 17 00:00:00 2001 From: Zambom Date: Sun, 10 Sep 2017 01:37:11 -0300 Subject: [PATCH] Adding subject and participants badge in app --- api/views.py | 6 +++--- subjects/serializers.py | 16 +++++++++++++++- users/serializers.py | 21 ++++++++++++++++++++- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/api/views.py b/api/views.py index ff52515..f6b5685 100644 --- a/api/views.py +++ b/api/views.py @@ -65,7 +65,7 @@ def getToken(request): } auth = (oauth.client_id, oauth.client_secret) - + response = requests.post(request.build_absolute_uri(reverse('oauth2_provider:token')), data = data, auth = auth) json_r = json.loads(response.content.decode('utf-8')) @@ -169,7 +169,7 @@ class SubjectViewset(viewsets.ReadOnlyModelViewSet): subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)).distinct() - serializer = SubjectSerializer(subjects, many = True) + serializer = SubjectSerializer(subjects, many = True, context = {"request_user": user}) json_r = json.dumps(serializer.data) json_r = json.loads(json_r) @@ -207,7 +207,7 @@ class ParticipantsViewset(viewsets.ReadOnlyModelViewSet): if not subject_slug == "": participants = User.objects.filter(Q(is_staff = True) | Q(subject_student__slug = subject_slug) | Q(professors__slug = subject_slug) | Q(coordinators__subject_category__slug = subject_slug)).exclude(email = username).distinct() - serializer = UserSerializer(participants, many = True) + serializer = UserSerializer(participants, many = True, context = {"request_user": username}) json_r = json.dumps(serializer.data) json_r = json.loads(json_r) diff --git a/subjects/serializers.py b/subjects/serializers.py index bef8ea9..6625e61 100644 --- a/subjects/serializers.py +++ b/subjects/serializers.py @@ -1,5 +1,10 @@ +import datetime +from django.db.models import Q + from rest_framework import serializers +from chat.models import ChatVisualizations + from .models import Subject, Tag class TagSerializer(serializers.ModelSerializer): @@ -24,7 +29,16 @@ class TagSerializer(serializers.ModelSerializer): validators = [] class SubjectSerializer(serializers.ModelSerializer): + notifications = serializers.SerializerMethodField() + + def get_notifications(self, subject): + user = self.context.get("request_user", None) + + if not user is None: + return ChatVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & Q(message__subject = subject) & (Q(user__is_staff = True) | Q(message__subject__students = user) | Q(message__subject__professor = user) | Q(message__subject__category__coordinators = user))).distinct().count() + + return 0 class Meta: model = Subject - fields = ["name", "slug", "visible", "description_brief", "description"] \ No newline at end of file + fields = ["name", "slug", "visible", "description_brief", "description", "notifications"] \ No newline at end of file diff --git a/users/serializers.py b/users/serializers.py index fe3e810..0831193 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -1,13 +1,17 @@ import os import zipfile import time +from django.db.models import Q from django.conf import settings from django.core.files import File + from rest_framework import serializers from log.serializers import LogSerializer from log.models import Log +from chat.models import Conversation, ChatVisualizations + from .models import User class UserBackupSerializer(serializers.ModelSerializer): @@ -58,7 +62,22 @@ class UserBackupSerializer(serializers.ModelSerializer): validators = [] class UserSerializer(serializers.ModelSerializer): + unseen_msgs = serializers.SerializerMethodField() + + def get_unseen_msgs(self, user_to): + user = self.context.get('request_user', None) + + if not user is None: + chat = Conversation.objects.filter((Q(user_one__email = user) & Q(user_two = user_to)) | (Q(user_one = user_to) & Q(user_two__email = user))) + + if chat.count() > 0: + chat = chat[0] + + return ChatVisualizations.objects.filter(message__talk = chat, user__email = user, viewed = False).count() + + return 0 + class Meta: model = User fields = ('username','email','image_url','last_update','date_created','last_name','social_name', - 'is_staff','is_active','description') + 'is_staff','is_active','description','unseen_msgs') -- libgit2 0.21.2