summaryrefslogtreecommitdiff
path: root/pedidos-ya/app/opinion/views.py
blob: a0cb9165f5aed2ee4ac8f7abe5f54a830da9ba1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)