217 lines
8.8 KiB
Python
217 lines
8.8 KiB
Python
|
from rest_framework import generics, status, viewsets
|
||
|
from users.models import BlockchainUserInfo
|
||
|
from rest_framework_simplejwt.tokens import AccessToken
|
||
|
from jwt.exceptions import InvalidTokenError
|
||
|
from rest_framework.permissions import IsAuthenticated
|
||
|
from rest_framework_simplejwt.authentication import JWTAuthentication
|
||
|
from institutional.models import CorporateUser, CorporateMember
|
||
|
|
||
|
from rest_framework.views import APIView
|
||
|
from rest_framework.response import Response
|
||
|
from rest_framework import status
|
||
|
from django.http import JsonResponse, HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseBadRequest
|
||
|
from django.contrib.auth.models import User
|
||
|
from users.models import UserCredentialsForBlockchain
|
||
|
from .serializers import UserCredentialsForBlockchainSerializer, BlockchainUserInfoSerializer, UserSerializer
|
||
|
from Blockchain2.block_user_info import *
|
||
|
from Blockchain2.web3User import *
|
||
|
from django.contrib.auth import get_user_model
|
||
|
|
||
|
User = get_user_model()
|
||
|
|
||
|
class BlockchainUserFilterView(generics.ListCreateAPIView):
|
||
|
authentication_classes = [JWTAuthentication]
|
||
|
permission_classes = [IsAuthenticated]
|
||
|
serializer_class = BlockchainUserInfoSerializer
|
||
|
|
||
|
def list(self, request):
|
||
|
queryset = BlockchainUserInfo.objects.all()
|
||
|
|
||
|
date_param = request.query_params.get('date')
|
||
|
service_param = request.query_params.get('service')
|
||
|
user_param = request.query_params.get('user')
|
||
|
|
||
|
|
||
|
if CorporateMember.objects.filter(user=self.request.user).exists():
|
||
|
print("I am herw")
|
||
|
corporate_member = CorporateMember.objects.get(user=self.request.user)
|
||
|
corporate_users = CorporateUser.objects.filter(this_user_admin_id=corporate_member.corporate_member_uuid)
|
||
|
print("I am hereeeee", corporate_users, corporate_member, corporate_member.corporate_member_uuid)
|
||
|
corporate_user_ids = corporate_users.values_list('user_id', flat=True)
|
||
|
print("madihaaaaaaa", corporate_user_ids)
|
||
|
queryset = queryset.filter(user_id__in=corporate_user_ids)
|
||
|
print("huehue", corporate_user_ids, queryset)
|
||
|
|
||
|
if service_param:
|
||
|
serialized_data = self.get_serializer(queryset, many=True).data
|
||
|
data_dict = {}
|
||
|
for entry in serialized_data:
|
||
|
service = entry['service'].replace(" ", "")
|
||
|
|
||
|
if service not in data_dict:
|
||
|
data_dict[service] = {'transactions': [], 'total_gas_fee': 0}
|
||
|
|
||
|
gas_fee = entry['gas_fee']
|
||
|
data_dict[service]['total_gas_fee'] += gas_fee
|
||
|
data_dict[service]['transactions'].append(entry)
|
||
|
|
||
|
return Response(data_dict)
|
||
|
|
||
|
if user_param:
|
||
|
serialized_data = self.get_serializer(queryset, many=True).data
|
||
|
data_dict = {}
|
||
|
for entry in serialized_data:
|
||
|
user_id = entry['user']
|
||
|
username = User.objects.get(id=user_id).username
|
||
|
|
||
|
if username not in data_dict:
|
||
|
data_dict[username] = {'transactions': [], 'total_gas_fee': 0}
|
||
|
|
||
|
gas_fee = entry['gas_fee']
|
||
|
data_dict[username]['total_gas_fee'] += gas_fee
|
||
|
data_dict[username]['transactions'].append(entry)
|
||
|
|
||
|
return JsonResponse(data_dict)
|
||
|
|
||
|
if date_param:
|
||
|
queryset = queryset.order_by('-date_at')
|
||
|
serialized_data = self.get_serializer(queryset, many=True).data
|
||
|
print("madiha test", serialized_data, queryset)
|
||
|
sorted_data = []
|
||
|
total_gas_fee = 0
|
||
|
|
||
|
for entry in serialized_data:
|
||
|
user_id = entry['user']
|
||
|
if user_id:
|
||
|
user = User.objects.get(id=user_id)
|
||
|
entry['uploaded_by'] = user.username
|
||
|
else:
|
||
|
entry['uploaded_by'] = None
|
||
|
sorted_data.append(entry)
|
||
|
total_gas_fee += entry['gas_fee']
|
||
|
|
||
|
response_data = {
|
||
|
'data': sorted_data,
|
||
|
'total_gas_fee': total_gas_fee,
|
||
|
}
|
||
|
return JsonResponse(response_data)
|
||
|
|
||
|
else:
|
||
|
if date_param:
|
||
|
queryset = queryset.order_by('-date_at')
|
||
|
serialized_data = self.get_serializer(queryset, many=True).data
|
||
|
total_gas_fee = sum(entry['gas_fee'] for entry in serialized_data)
|
||
|
|
||
|
response_data = {
|
||
|
'data': serialized_data,
|
||
|
'total_gas_fee': total_gas_fee,
|
||
|
}
|
||
|
|
||
|
return Response(response_data)
|
||
|
|
||
|
if service_param:
|
||
|
serialized_data = self.get_serializer(queryset, many=True).data
|
||
|
data_dict = {}
|
||
|
|
||
|
for entry in serialized_data:
|
||
|
service = entry['service'].replace(" ", "")
|
||
|
|
||
|
if service not in data_dict:
|
||
|
data_dict[service] = {'transactions': [], 'total_gas_fee': 0}
|
||
|
|
||
|
gas_fee = entry['gas_fee']
|
||
|
data_dict[service]['total_gas_fee'] += gas_fee
|
||
|
data_dict[service]['transactions'].append(entry)
|
||
|
|
||
|
return Response(data_dict)
|
||
|
|
||
|
return Response({'detail': 'Invalid query parameters provided.'})
|
||
|
|
||
|
|
||
|
class GetUserPublicKeyView(APIView):
|
||
|
def get(self, request):
|
||
|
try:
|
||
|
credentials = UserCredentialsForBlockchain.objects.get(user=request.user)
|
||
|
serializer = UserCredentialsForBlockchainSerializer(credentials)
|
||
|
authentication_classes = [JWTAuthentication]
|
||
|
permission_classes = [IsAuthenticated]
|
||
|
|
||
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
except UserCredentialsForBlockchain.DoesNotExist:
|
||
|
return Response({'error': 'Blockchain credentials not found for the user'}, status=status.HTTP_400_BAD_REQUEST)
|
||
|
|
||
|
|
||
|
class GetUserTypeView(APIView):
|
||
|
authentication_classes = [JWTAuthentication]
|
||
|
permission_classes = [IsAuthenticated]
|
||
|
|
||
|
def get(self, request):
|
||
|
popup_param = request.query_params.get('popup')
|
||
|
popup= False
|
||
|
if popup_param:
|
||
|
popup = True
|
||
|
|
||
|
try:
|
||
|
u_id = request.user.id if request.user.id else 1499
|
||
|
user = User.objects.get(id=u_id)
|
||
|
user_data = UserSerializer(user).data
|
||
|
if CorporateMember.objects.filter(user=request.user).exists():
|
||
|
corporate_member = CorporateMember.objects.get(user=request.user)
|
||
|
data = {
|
||
|
'is_corporate': True,
|
||
|
'user': user_data,
|
||
|
'popup':popup
|
||
|
}
|
||
|
return Response(data, status=status.HTTP_200_OK)
|
||
|
else:
|
||
|
data = {
|
||
|
'is_corporate': False,
|
||
|
'user': user_data,
|
||
|
'popup':popup
|
||
|
|
||
|
}
|
||
|
return Response(data, status=status.HTTP_200_OK)
|
||
|
except Exception as e:
|
||
|
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||
|
|
||
|
|
||
|
def update_blockchain_info(request):
|
||
|
try:
|
||
|
user_infos = user_info(tx_hash="0x556facdba65b25dfb366d67f2798bf626153722d1c2ef7b2f58a42640a01dfa9", service="Narration", gas_fee=554435321,script_name = "Narration project")
|
||
|
addition_result = user_infos.update_info(request)
|
||
|
return HttpResponse(f"info=>sucessfully updated for {request.user}")
|
||
|
except Exception as e:
|
||
|
print("Error:",e)
|
||
|
return HttpResponse(f"info=>error{e}")
|
||
|
|
||
|
class GetUserTx_HashReciptView(APIView):
|
||
|
def get(self, request):
|
||
|
tx = request.query_params.get('tx_hash')
|
||
|
popup_param = request.query_params.get('popup')
|
||
|
|
||
|
try:
|
||
|
# authentication_classes = [JWTAuthentication]
|
||
|
# permission_classes = [IsAuthenticated]
|
||
|
if popup_param:
|
||
|
popup = True,
|
||
|
else:
|
||
|
popup = False,
|
||
|
|
||
|
response = get_transction_recipt('0xb0df1560040b294fe5b35ca136c98ff5f55e71b4f1593c27a8f43ac597079e9f')
|
||
|
txn_fee = response.effectiveGasPrice*response.gasUsed/1000000000000000000
|
||
|
data ={
|
||
|
'transactionHash': response.transactionHash.hex(),
|
||
|
'status':response.status,
|
||
|
'to':response.to,
|
||
|
'blockNumber':response.blockNumber,
|
||
|
'popup':popup,
|
||
|
'txn_fee':txn_fee,
|
||
|
'gas_used':response.gasUsed,
|
||
|
'from':'0x54d03ec0c462e9a01f77579c090cde0fc2617817',
|
||
|
'timestamp': 1713239236,
|
||
|
|
||
|
}
|
||
|
return Response(data, status=status.HTTP_200_OK)
|
||
|
except Exception as e :
|
||
|
return Response({'error': f'tx details not found{e}'}, status=status.HTTP_400_BAD_REQUEST)
|