49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
import logging
|
|
import traceback
|
|
|
|
from drf_spectacular.utils import extend_schema, extend_schema_view
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from payments.docs.drf.views import DEPOSIT_SCHEMA
|
|
from payments.gateways import UnknownGatewayError
|
|
from payments.models import Transaction
|
|
from payments.serializers import DepositSerializer, TransactionProcessSerializer
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@extend_schema_view(**DEPOSIT_SCHEMA)
|
|
class DepositView(APIView):
|
|
def post(self, request, *args, **kwargs):
|
|
logger.debug(request.__dict__)
|
|
serializer = DepositSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
if not request.user.is_authenticated:
|
|
return Response(data=serializer.errors, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
transaction = Transaction.objects.create(
|
|
balance=request.user.payments_balance, amount=serializer.validated_data["amount"], currency="EUR"
|
|
)
|
|
|
|
return Response(TransactionProcessSerializer(transaction).data, status=status.HTTP_303_SEE_OTHER)
|
|
|
|
|
|
@extend_schema(exclude=True)
|
|
class CallbackAPIView(APIView):
|
|
def post(self, request, *args, **kwargs):
|
|
logger.debug(request.__dict__)
|
|
try:
|
|
gateway = kwargs.get("gateway", "")
|
|
match gateway:
|
|
case "gateway":
|
|
# Gateway.process_callback(request.data)
|
|
return Response(status=status.HTTP_200_OK)
|
|
case _:
|
|
raise UnknownGatewayError(f"Couldn't match '{gateway}' any gateway")
|
|
except Exception as e:
|
|
return Response(
|
|
status=status.HTTP_500_INTERNAL_SERVER_ERROR, data={"error": f"{e}; {traceback.format_exc()}"}
|
|
)
|