Skip to content

Commit

Permalink
add serializer for circle api tx hash update view
Browse files Browse the repository at this point in the history
  • Loading branch information
prettyirrelevant committed Aug 31, 2023
1 parent 04db800 commit e27e393
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
12 changes: 12 additions & 0 deletions backend/bridgebloc/apps/conversions/serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import re
from typing import Any

from eth_utils.address import to_checksum_address
Expand Down Expand Up @@ -25,6 +26,17 @@
)


class CircleTokenConversionDepositTxHashUpdateSerializer(serializers.Serializer):
tx_hash = serializers.CharField(required=True)

def validate_tx_hash(self, value: str) -> str:
is_valid_hash = re.fullmatch('^0x[a-fA-F0-9]{64}', value)
if not bool(is_valid_hash):
raise serializers.ValidationError('Invalid transaction hash provided')

return value


class TokenConversionStepSerializer(serializers.ModelSerializer):
class Meta:
model = TokenConversionStep
Expand Down
22 changes: 7 additions & 15 deletions backend/bridgebloc/apps/conversions/views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import re
from collections import defaultdict
from typing import Any

Expand Down Expand Up @@ -27,6 +26,7 @@
from .serializers import (
CCTPTokenConversionInitialisationSerializer,
CircleAPITokenConversionInitialisationSerializer,
CircleTokenConversionDepositTxHashUpdateSerializer,
LxLyTokenConversionInitialisationSerializer,
TokenConversionSerializer,
)
Expand All @@ -46,10 +46,14 @@ def get(self, request: Request, *args: Any, **kwargs: Any) -> Response: # noqa:

class CircleTokenConversionDepositTxHashUpdateAPIView(GenericAPIView):
queryset = TokenConversion.objects.select_related('creator').prefetch_related('conversion_steps')
serializer_class = CircleTokenConversionDepositTxHashUpdateSerializer
permission_classes = (IsAuthenticated, IsOwner)
lookup_field = 'uuid'

def post(self, request: Request, *args: Any, **kwargs: Any) -> Response: # noqa: ARG002
def patch(self, request: Request, *args: Any, **kwargs: Any) -> Response: # noqa: ARG002
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)

obj = self.get_object()
step = obj.conversion_steps.filter(step_type=CircleAPIConversionStepType.CONFIRM_DEPOSIT).first()
if step is None:
Expand All @@ -59,19 +63,7 @@ def post(self, request: Request, *args: Any, **kwargs: Any) -> Response: # noqa
message='Token conversion is not of Circle API type or deposit address has not been created',
)

tx_hash = request.data['tx_hash']

def is_transaction_valid(val: str) -> bool:
return bool(re.fullmatch('^0x[a-fA-F0-9]{64}', val))

if not is_transaction_valid(tx_hash):
return error_response(
errors=None,
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
message='Malformed transaction hash provided',
)

step.metadata['deposit_tx_hash'] = tx_hash
step.metadata['deposit_tx_hash'] = serializer.validated_data['tx_hash']
step.save()
return success_response(data=None)

Expand Down

0 comments on commit e27e393

Please sign in to comment.