diff options
Diffstat (limited to 'pedidos-ya/app/opinion/views.py')
-rw-r--r-- | pedidos-ya/app/opinion/views.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/pedidos-ya/app/opinion/views.py b/pedidos-ya/app/opinion/views.py new file mode 100644 index 0000000..a0cb916 --- /dev/null +++ b/pedidos-ya/app/opinion/views.py @@ -0,0 +1,61 @@ +from rest_framework import generics, status +from rest_framework.permissions import AllowAny, IsAdminUser +from rest_framework.response import Response + +from opinion.models import Opinion +from opinion.serializers import OpinionSerializer + + +class ListCreateOpinionView(generics.ListCreateAPIView): + """Creates (POST) or lists (GET) new opinions""" + serializer_class = OpinionSerializer + permission_classes = (AllowAny,) + + def get_queryset(self): + """Filter by store_id, user_id, purchase_id or dates""" + queryset = Opinion.objects.all() + + store_id = self.request.query_params.get('store_id', False) + user_id = self.request.query_params.get('user_id', False) + purchase_id = self.request.query_params.get('purchase_id', False) + from_date = self.request.query_params.get('from_date', False) + to_date = self.request.query_params.get('to_date', False) + + if store_id: + queryset = queryset.filter(store_id=store_id) + if user_id: + queryset = queryset.filter(user_id=user_id) + if purchase_id: + queryset = queryset.filter(purchase_id=purchase_id) + + if from_date and to_date: + queryset = queryset.filter( + created_at__range=[from_date, to_date]) + + return queryset + + def post(self, request, *args, **kwargs): + try: + Opinion.objects.get(purchase_id=request.data['purchase_id']) + except Opinion.DoesNotExist: + return self.create(request, *args, **kwargs) + + return Response( + {'detail': 'This purchase has aleady been commented'}, + status=status.HTTP_406_NOT_ACCEPTABLE) + + +class RetrieveUpdateDestroyOpinionView(generics.RetrieveUpdateDestroyAPIView): + """Retrieves (GET), updates (PUT), partial updates (PATCH) or destroys + (DELETE) opinions""" + + serializer_class = OpinionSerializer + permission_classes = (AllowAny,) + queryset = Opinion.objects.all() + + def delete(self, request, *args, **kwargs): + if not IsAdminUser().has_permission(request, self): + self.permission_denied( + request, message=getattr(IsAdminUser, 'message', None) + ) + return self.destroy(request, *args, **kwargs) |