forked from uncloud/uncloud
Allow for charging customers
This commit is contained in:
parent
94a39ed81d
commit
e0cb6ac670
4 changed files with 32 additions and 20 deletions
|
|
@ -63,6 +63,8 @@ class PaymentMethodViewSet(viewsets.ModelViewSet):
|
|||
def get_serializer_class(self):
|
||||
if self.action == 'create':
|
||||
return CreatePaymentMethodSerializer
|
||||
elif self.action == 'charge':
|
||||
return ChargePaymentMethodSerializer
|
||||
else:
|
||||
return PaymentMethodSerializer
|
||||
|
||||
|
|
@ -99,18 +101,18 @@ class PaymentMethodViewSet(viewsets.ModelViewSet):
|
|||
output_serializer = PaymentMethodSerializer(payment_method)
|
||||
return Response(output_serializer.data)
|
||||
|
||||
# TODO: find a way to customize serializer for actions.
|
||||
# drf-action-serializer module seems to do that.
|
||||
@action(detail=True, methods=['post'])
|
||||
def charge(self, request, pk=None):
|
||||
payment_method = self.get_object()
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
amount = serializer.data['amount']
|
||||
if payment_method.charge(amount):
|
||||
return Response({'charged', amount})
|
||||
else:
|
||||
return Response(status=status.HTTP_500_INTERNAL_ERROR)
|
||||
amount = serializer.validated_data['amount']
|
||||
try:
|
||||
payment = payment_method.charge(amount)
|
||||
output_serializer = PaymentSerializer(payment)
|
||||
return Response(output_serializer.data)
|
||||
except Exception as e:
|
||||
return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
###
|
||||
# Admin views.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue