accounts/apps/transactions/views.py
2019-12-13 17:43:13 +03:30

73 lines
2.5 KiB
Python
Executable file

from django.db.models import Q
from oauth2_provider.contrib.rest_framework import TokenHasScope, IsAuthenticatedOrTokenHasScope
from rest_framework import generics, permissions
from rest_framework.response import Response
from apps.transactions.models import Transaction
from apps.transactions.serializers import TransactionSerializer
class TransactionList(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
serializer_class = TransactionSerializer
required_scopes = []
def get_queryset(self):
user = self.request.user
return Transaction.objects.filter(Q(payee_id=user.id) | Q(payer_id=user.id)).all()
def perform_create(self, serializer):
try:
application = self.request.auth.application
application_id = application.id
except:
application_id = None
user = self.request.user
serializer.save(payee=user, application_id=application_id)
class TransactionDetail(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
serializer_class = TransactionSerializer
lookup_field = 'code'
required_scopes = []
def get_queryset(self):
user = self.request.user
return Transaction.objects.filter(Q(payee_id=user.id) | Q(payer_id=user.id) | Q(payer__isnull=True)).all()
class TransactionPay(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
serializer_class = TransactionSerializer
lookup_field = 'code'
required_scopes = []
def get_queryset(self):
user = self.request.user
return Transaction.objects.filter(Q(payer_id=user.id) | Q(payer__isnull=True)).all()
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
instance.pay(payer=self.request.user)
serializer = self.get_serializer(instance)
return Response(serializer.data)
class TransactionReceipt(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
serializer_class = TransactionSerializer
lookup_field = 'code'
required_scopes = []
def get_queryset(self):
user = self.request.user
return Transaction.objects.filter(payer_id=user.id).all()
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
instance.receipt()
serializer = self.get_serializer(instance)
return Response(serializer.data)