From 3e309da463cc489bf651ab0dae02c314e09eea55 Mon Sep 17 00:00:00 2001 From: Zambom Date: Fri, 30 Jun 2017 22:27:55 -0300 Subject: [PATCH] Adding subjects and participants list api access --- api/urls.py | 1 + api/views.py | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------- subjects/models.py | 20 ++++++++++++-------- subjects/serializers.py | 13 +++++++++++-- 4 files changed, 104 insertions(+), 42 deletions(-) diff --git a/api/urls.py b/api/urls.py index 3390cd4..6c12ad3 100644 --- a/api/urls.py +++ b/api/urls.py @@ -13,6 +13,7 @@ router = routers.DefaultRouter() router.register(r'logs', LogViewSet) router.register(r'usersapi', UserViewSet) router.register(r'users', views.LoginViewset) +router.register(r'subjects', views.SubjectViewset) urlpatterns = [ #API REST diff --git a/api/views.py b/api/views.py index fb690c3..a56b0eb 100644 --- a/api/views.py +++ b/api/views.py @@ -9,6 +9,9 @@ from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnl from security.models import Security +from subjects.serializers import SubjectSerializer +from subjects.models import Subject + from users.serializers import UserSerializer from users.models import User @@ -16,37 +19,6 @@ from oauth2_provider.views.generic import ProtectedResourceView from oauth2_provider.models import Application from django.http import HttpResponse -class LoginViewset(viewsets.ReadOnlyModelViewSet): - queryset = User.objects.all() - permissions_classes = (IsAuthenticated,) - - @csrf_exempt - @list_route(methods = ['POST'], permissions_classes = [IsAuthenticated]) - def login(self, request): - username = request.data['email'] - - user = self.queryset.get(email = username) - - if not user is None: - serializer = UserSerializer(user) - - json_r = json.dumps(serializer.data) - json_r = json.loads(json_r) - - user_info = {} - user_info["data"] = json_r - - user_info["message"] = "" - user_info["type"] = "" - user_info["title"] = "" - user_info["success"] = True - user_info["number"] = 1 - user_info['extra'] = 0 - - response = json.dumps(user_info) - - return HttpResponse(response) - @csrf_exempt def getToken(request): oauth = Application.objects.filter(name = "amadeus-droid") @@ -91,4 +63,80 @@ def getToken(request): except KeyError: response = "Error" - return HttpResponse(response) \ No newline at end of file + return HttpResponse(response) + +class LoginViewset(viewsets.ReadOnlyModelViewSet): + queryset = User.objects.all() + permissions_classes = (IsAuthenticated,) + + @csrf_exempt + @list_route(methods = ['POST'], permissions_classes = [IsAuthenticated]) + def login(self, request): + username = request.data['email'] + + user = self.queryset.get(email = username) + response = "" + + if not user is None: + serializer = UserSerializer(user) + + json_r = json.dumps(serializer.data) + json_r = json.loads(json_r) + + user_info = {} + user_info["data"] = json_r + + user_info["message"] = "" + user_info["type"] = "" + user_info["title"] = "" + user_info["success"] = True + user_info["number"] = 1 + user_info['extra'] = 0 + + response = json.dumps(user_info) + + return HttpResponse(response) + +class SubjectViewset(viewsets.ReadOnlyModelViewSet): + queryset = Subject.objects.all() + permissions_classes = (IsAuthenticated, ) + + @csrf_exempt + @list_route(methods = ['POST'], permissions_classes = [IsAuthenticated]) + def get_subjects(self, request): + username = request.data['email'] + + user = User.objects.get(email = username) + + subjects = None + + response = "" + + if not user is None: + if user.is_staff: + subjects = Subject.objects.all().order_by("name") + else: + pk = user.pk + + subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)).distinct() + + serializer = SubjectSerializer(subjects, many = True) + + json_r = json.dumps(serializer.data) + json_r = json.loads(json_r) + + sub_info = {} + + sub_info["data"] = {} + sub_info["data"]["subjects"] = json_r + + sub_info["message"] = "" + sub_info["type"] = "" + sub_info["title"] = "" + sub_info["success"] = True + sub_info["number"] = 1 + sub_info['extra'] = 0 + + response = json.dumps(sub_info) + + return HttpResponse(response) \ No newline at end of file diff --git a/subjects/models.py b/subjects/models.py index f42fb29..cd35f3f 100644 --- a/subjects/models.py +++ b/subjects/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.db.models import Q from autoslug.fields import AutoSlugField @@ -10,8 +11,10 @@ from django.core.exceptions import ValidationError from categories.models import Category import datetime + class Tag(models.Model): name = models.CharField( _("Name"), unique = True,max_length= 200, blank = True) + def __str__(self): return self.name @@ -41,6 +44,7 @@ class Subject(models.Model): category = models.ForeignKey(Category, related_name="subject_category", null=True) max_upload_size = models.IntegerField(_("Maximum upload size"), default=1024, null=True) + class Meta: verbose_name = "Subject" verbose_name_plural = "Subjects" @@ -49,11 +53,11 @@ class Subject(models.Model): def __str__(self): return self.name - # def clean(self): - - # if self.subscribe_begin > self.end_date: - # raise ValidationError(_('Subscribe period should be between course time')) - - - - + def get_participants(self): + data = User.objects.filter( + Q(is_staff = True) | Q(subject_student__slug = self.slug) | + Q(professors__slug = self.slug) | + Q(coordinators__subject_category__slug = self.slug) + ).distinct() + + return data \ No newline at end of file diff --git a/subjects/serializers.py b/subjects/serializers.py index 4724969..5ecdf54 100644 --- a/subjects/serializers.py +++ b/subjects/serializers.py @@ -1,6 +1,8 @@ from rest_framework import serializers -from .models import Tag +from .models import Subject, Tag + +from users.serializers import UserSerializer class TagSerializer(serializers.ModelSerializer): def validate(self, data): @@ -21,4 +23,11 @@ class TagSerializer(serializers.ModelSerializer): "validators": [], }, } - validators = [] \ No newline at end of file + validators = [] + +class SubjectSerializer(serializers.ModelSerializer): + participants = UserSerializer(many = True, source = 'get_participants') + + class Meta: + model = Subject + fields = ["name", "slug", "visible", "participants"] \ No newline at end of file -- libgit2 0.21.2