diff --git a/apps/pg/serializers.py b/apps/pg/serializers.py index 569a4cb..1f5f18f 100644 --- a/apps/pg/serializers.py +++ b/apps/pg/serializers.py @@ -21,3 +21,21 @@ class PaymentRequestSerializer(serializers.ModelSerializer): read_only_fields = ['uuid', 'user','updated_at', 'state', 'created_at'] +class ApplicationPaymentRequestSerializer(serializers.ModelSerializer): + # uuid = serializers.UUIDField(required=True) + + class Meta: + model = PaymentRequest + fields = ( + 'uuid', + 'user', + "created_at", + "state", + 'amount', + 'updated_at', + 'callback_url', + "phone_number" + ) + + read_only_fields = ['uuid', 'updated_at', 'state', 'created_at'] + diff --git a/apps/pg/views.py b/apps/pg/views.py index c4eb940..064b0fc 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -12,9 +12,10 @@ from rest_framework.views import APIView from .forms import PaymentRequestForm from .models import PaymentRequest, GatewayChoise -from .serializers import PaymentRequestSerializer +from .serializers import PaymentRequestSerializer, ApplicationPaymentRequestSerializer from .constans import StateChoices from ..gooyal_oauth2.utils import get_application +from ..users.models import User class PaymentRequestCreateApiView(generics.CreateAPIView): @@ -31,6 +32,21 @@ class PaymentRequestCreateApiView(generics.CreateAPIView): # TODO: web view # charge_request.charge_wallet_balance() +class ApplicationPaymentRequestCreateApiView(generics.CreateAPIView): + permission_classes = [IsAuthenticatedOrTokenHasScope] + serializer_class = ApplicationPaymentRequestSerializer + required_scopes = ['ipg.application:request_user_charge'] # TODO: is it good scope? + model = PaymentRequest + + def perform_create(self, serializer): + user_id = serializer.validated_data['user'] + user, created = User.objects.get_or_create(id=user_id) + application = get_application(self.request) + charge_request: PaymentRequest = serializer.save(user=user, application=application) + + # TODO: web view + # charge_request.charge_wallet_balance() + @method_decorator(csrf_exempt, name='dispatch') class PaymentRequestView(UpdateView): template_name = 'pg/payment-request.html'