diff --git a/server/oceandbs/models.py b/server/oceandbs/models.py index c9d488b..22dadd7 100644 --- a/server/oceandbs/models.py +++ b/server/oceandbs/models.py @@ -29,6 +29,7 @@ class Storage(models.Model): is_active = models.BooleanField(default=True) def __str__(self): + print("Storage __str__ method called") return self.type + " - " + self.description class Meta: @@ -40,6 +41,7 @@ class PaymentMethod(models.Model): rpcEndpointUrl = models.URLField(max_length=2048, default="https://rpc-mumbai.maticvigil.com/") def __str__(self): + print("PaymentMethod __str__ method called") return self.chainId + " - " + str(self.storage) @@ -49,6 +51,7 @@ class AcceptedToken(models.Model): paymentMethod = models.ForeignKey(PaymentMethod, null=True, on_delete=models.CASCADE, related_name="acceptedTokens") def __str__(self): + print("AcceptedToken __str__ method called") return str(self.paymentMethod) + " - " + self.title + " - " + self.value @@ -59,6 +62,7 @@ class Payment(models.Model): paymentMethod = models.ForeignKey(PaymentMethod, null=True, on_delete=models.CASCADE, related_name="payments") def nonce_computation(): + print("Payment nonce_computation method called") return timezone.now() - timezone.timedelta(days=7) class Quote(models.Model): @@ -74,6 +78,7 @@ class Quote(models.Model): nonce = models.DateTimeField(default=nonce_computation()) def __str__(self): + print("Quote __str__ method called") return str(self.storage) + " - " + self.tokenAddress class Meta: @@ -87,4 +92,5 @@ class File(models.Model): length = models.BigIntegerField(default=0) def __str__(self): + print("File __str__ method called") return str(self.quote) + " - " + str(self.length) diff --git a/server/oceandbs/serializers.py b/server/oceandbs/serializers.py index 5969485..3855580 100644 --- a/server/oceandbs/serializers.py +++ b/server/oceandbs/serializers.py @@ -16,9 +16,14 @@ class Meta: fields = ['chainId', 'acceptedTokens'] def to_representation(self, instance): - representation = super().to_representation(instance) - representation['acceptedTokens'] = [{"title": token.title, "value": token.value} for token in instance.acceptedTokens.all()] - return representation + print("to_representation called in PaymentMethodSerializer") + try: + representation = super().to_representation(instance) + representation['acceptedTokens'] = [{"title": token.title, "value": token.value} for token in instance.acceptedTokens.all()] + return representation + except Exception as e: + print(f"Error in PaymentMethodSerializer to_representation: {e}") + raise e class PaymentSerializer(serializers.ModelSerializer): paymentMethod = PaymentMethodSerializer() @@ -49,16 +54,24 @@ class Meta: fields = ['type', 'description', 'url', 'payment'] def create(self, validated_data): - payment_method_data = validated_data.pop('payment') - storage = Storage.objects.create(**validated_data) - - for method_data in payment_method_data: - accepted_tokens_data = method_data.pop('acceptedTokens') - method = PaymentMethod.objects.create(storage=storage, **method_data) - for accepted_token_data in accepted_tokens_data: - AcceptedToken.objects.create(paymentMethod=method, **accepted_token_data) - - return storage + print("create called in CreateStorageSerializer") + try: + payment_method_data = validated_data.pop('payment') + storage = Storage.objects.create(**validated_data) + print(f"Storage created: {storage}") + + for method_data in payment_method_data: + accepted_tokens_data = method_data.pop('acceptedTokens') + method = PaymentMethod.objects.create(storage=storage, **method_data) + print(f"PaymentMethod created: {method}") + for accepted_token_data in accepted_tokens_data: + AcceptedToken.objects.create(paymentMethod=method, **accepted_token_data) + print(f"AcceptedToken created with data: {accepted_token_data}") + + return storage + except Exception as e: + print(f"Error in CreateStorageSerializer create: {e}") + raise e class QuoteSerializer(serializers.ModelSerializer): payment = PaymentSerializer() @@ -69,19 +82,32 @@ class Meta: fields = ['storage', 'tokenAmount', 'quoteId', 'duration', 'tokenAddress', 'approveAddress', 'status', 'files', 'payment'] def create(self, validated_data): - payment_data = validated_data.pop('payment') - files_data = validated_data.pop('files') - quote = Quote.objects.create(**validated_data) - - payment_method_data = payment_data.pop('paymentMethod') - method = PaymentMethod.objects.filter(storage=validated_data['storage'], chainId=payment_method_data['chainId']).first() - payment_data['paymentMethod'] = method - payment = Payment.objects.create(quote=quote, **payment_data) - - quote.payment = payment - quote.save() - - for file_data in files_data: - File.objects.create(quote=quote, **file_data) - - return quote \ No newline at end of file + print("create called in QuoteSerializer") + try: + payment_data = validated_data.pop('payment') + files_data = validated_data.pop('files') + quote = Quote.objects.create(**validated_data) + print(f"Quote created: {quote}") + + payment_method_data = payment_data.pop('paymentMethod') + method = PaymentMethod.objects.filter(storage=validated_data['storage'], chainId=payment_method_data['chainId']).first() + if method: + print(f"PaymentMethod found: {method}") + else: + print(f"No PaymentMethod found for chainId: {payment_method_data['chainId']}") + + payment_data['paymentMethod'] = method + payment = Payment.objects.create(quote=quote, **payment_data) + print(f"Payment created: {payment}") + + quote.payment = payment + quote.save() + + for file_data in files_data: + File.objects.create(quote=quote, **file_data) + print(f"File created with data: {file_data}") + + return quote + except Exception as e: + print(f"Error in QuoteSerializer create: {e}") + raise e diff --git a/server/oceandbs/views.py b/server/oceandbs/views.py index 53e6cea..49aedbc 100644 --- a/server/oceandbs/views.py +++ b/server/oceandbs/views.py @@ -344,37 +344,59 @@ def post(self, request): if response is None: print("No response was obtained from the API call.") - if response and response.status_code == 200: - response_data = json.loads(response.content) - - data['storage'] = storage.pk - data['status'] = UPLOAD_CODE[1][0] - data['payment']['paymentMethod'] = { - 'chainId': data['payment']['chainId']} - data['payment']['userAddress'] = data['userAddress'] - - data.update(response_data) - - serializer = QuoteSerializer(data=data) - if serializer.is_valid(): - quote = serializer.save() - return Response({ - 'quoteId': quote.quoteId, - 'tokenAmount': quote.tokenAmount, - 'approveAddress': quote.approveAddress, - 'chainId': data['payment']['paymentMethod']['chainId'], - 'tokenAddress': quote.tokenAddress - }, status=201) + try: + if response: + print("Response received.") + + if response.status_code == 200: + print("Response status code is 200.") + + try: + response_data = json.loads(response.content) + print("Response data successfully decoded from JSON.") + except json.JSONDecodeError as e: + print(f"Error decoding JSON: {e}") + return Response({'error': 'Invalid response format'}, status=500) + + data['storage'] = storage.pk + data['status'] = UPLOAD_CODE[1][0] + data['payment']['paymentMethod'] = {'chainId': data['payment']['chainId']} + data['payment']['userAddress'] = data['userAddress'] + data.update(response_data) + + serializer = QuoteSerializer(data=data) + if serializer.is_valid(): + print("Serializer is valid.") + try: + quote = serializer.save() + print("Quote saved successfully.") + return Response({ + 'quoteId': quote.quoteId, + 'tokenAmount': quote.tokenAmount, + 'approveAddress': quote.approveAddress, + 'chainId': data['payment']['paymentMethod']['chainId'], + 'tokenAddress': quote.tokenAddress + }, status=201) + except Exception as e: + print(f"Error saving quote: {e}") + return Response({'error': 'Error saving quote'}, status=500) + else: + print("Serializer validation failed.") + print(serializer.errors) + return Response(serializer.errors, status=400) + else: + print(f"Response status code is not 200. Status code: {response.status_code}") + try: + return Response(response.json(), status=400) + except Exception as e: + print(f"Error parsing response: {e}") + return JsonResponse({'error': 'Invalid response format'}, status=500) else: - return Response(serializer.errors, status=400) - else: - try: - print('response: ', response) - return Response(response, status=400) - except Exception as e: - return JsonResponse({'error': f'An unexpected error occurred: {str(e)}'}, status=500) - - + print("No response received.") + return JsonResponse({'error': 'No response received'}, status=500) + except Exception as e: + print(f"Unhandled exception: {e}") + return JsonResponse({'error': 'An unexpected error occurred'}, status=500) # Quote detail endpoint displaying the detail of a quote, no update, no deletion for now. class QuoteStatusView(APIView):