summaryrefslogtreecommitdiff
path: root/pedidos-ya/app/opinion/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'pedidos-ya/app/opinion/views.py')
-rw-r--r--pedidos-ya/app/opinion/views.py61
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)