fixed pr, optimised code

This commit is contained in:
Alexander Karpov 2022-10-08 19:57:46 +03:00
parent 7ba849cd29
commit ae7cfe5166
5 changed files with 86 additions and 71 deletions

View File

@ -104,7 +104,7 @@ urlpatterns = [
), ),
), ),
path( path(
"create_season/", "season/",
include([path("", CreateSeasonApi.as_view(), name="create new season")]), include([path("", CreateSeasonApi.as_view(), name="create new season")]),
), ),
] ]

View File

@ -13,4 +13,6 @@ channels==3.0.5
channels-redis==4.0.0 channels-redis==4.0.0
celery==5.2.7 celery==5.2.7
django-celery-beat==2.3.0 django-celery-beat==2.3.0
faker==15.0.0

View File

@ -3,8 +3,7 @@ from rest_framework.generics import get_object_or_404
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from common.permissions import IsAdmin from common.permissions import IsAdmin
from users.api.serializers import UserSerializer, CreateSeasonSerializer from users.api.serializers import CreateSeasonSerializer
from users.models import User
from users.api.serializers import ( from users.api.serializers import (
UserSerializer, UserSerializer,
DepartmentSerializer, DepartmentSerializer,

View File

@ -2,6 +2,8 @@ from django.contrib.auth.models import AbstractUser
from django.core.validators import MinValueValidator from django.core.validators import MinValueValidator
from django.db import models from django.db import models
from faker import Faker
class User(AbstractUser): class User(AbstractUser):
class WorkerType(models.TextChoices): class WorkerType(models.TextChoices):
@ -20,8 +22,7 @@ class User(AbstractUser):
type = models.CharField( type = models.CharField(
max_length=6, choices=WorkerType.choices, default=WorkerType.WORKER max_length=6, choices=WorkerType.choices, default=WorkerType.WORKER
) )
salary = models.IntegerField(default=0) clan = models.ForeignKey("users.Clan", on_delete=models.SET_NULL, null=True)
clan = models.ForeignKey(Clan, on_delete=models.SET_NULL, null=True)
command = models.ForeignKey( command = models.ForeignKey(
"users.Command", related_name="workers", on_delete=models.CASCADE "users.Command", related_name="workers", on_delete=models.CASCADE
) )
@ -75,3 +76,12 @@ class Command(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class Clan(models.Model):
name = models.CharField(max_length=100, null=True)
def save(self, *args, **kwargs):
name = Faker().name()
self.name = name + "'s clan"
super(Clan, self).save(*args, **kwargs)

View File

@ -4,12 +4,9 @@ import json
from time import sleep from time import sleep
from typing import List from typing import List
URL = 'https://hackathon.lsp.team/hk' URL = "https://hackathon.lsp.team/hk"
base_headers = { base_headers = {"Content-Type": "application/json", "Accept": "application/json"}
'Content-Type': 'application/json',
'Accept': 'application/json'
}
class Wallet(BaseModel): class Wallet(BaseModel):
@ -40,91 +37,98 @@ class TransactionHistory(BaseModel):
def create_wallet() -> Wallet: def create_wallet() -> Wallet:
response = r.post(URL+'/v1/wallets/new') response = r.post(URL + "/v1/wallets/new")
data = response.json() data = response.json()
return Wallet(publicKey=data['publicKey'], privateKey=data['privateKey']) return Wallet(publicKey=data["publicKey"], privateKey=data["privateKey"])
def check_transaction(trans_hash: str) -> str: def check_transaction(trans_hash: str) -> str:
res = r.get(URL + '/v1/transfers/status/'+trans_hash, data=json.dumps({ res = r.get(
'transactionHash': trans_hash URL + "/v1/transfers/status/" + trans_hash,
}), data=json.dumps({"transactionHash": trans_hash}),
headers=base_headers headers=base_headers,
) )
return res.json()['status'] return res.json()["status"]
def transfer_rubbles(my_wallet_private_key, transfer_publick_key: str, amount: float) -> TransHash: def transfer_rubbles(
response = r.post(URL+'/v1/transfers/ruble', data=json.dumps({ my_wallet_private_key, transfer_publick_key: str, amount: float
"fromPrivateKey": my_wallet_private_key, ) -> TransHash:
"toPublicKey": transfer_publick_key, response = r.post(
"amount": amount URL + "/v1/transfers/ruble",
}), data=json.dumps(
headers={ {
'Content-Type': 'application/json', "fromPrivateKey": my_wallet_private_key,
'Accept': 'application/json' "toPublicKey": transfer_publick_key,
} "amount": amount,
}
),
headers={"Content-Type": "application/json", "Accept": "application/json"},
) )
return TransHash(transaction_hash=response.json()['transaction']) return TransHash(transaction_hash=response.json()["transaction"])
def create_nft(wallet_public_key: str, string_url: str) -> TransHash: def create_nft(wallet_public_key: str, string_url: str) -> TransHash:
response = r.post(URL + '/v1/nft/generate', data=json.dumps( response = r.post(
{ URL + "/v1/nft/generate",
"toPublicKey": wallet_public_key, data=json.dumps(
"uri": string_url, {"toPublicKey": wallet_public_key, "uri": string_url, "nftCount": 1}
"nftCount": 1
}
), ),
headers=base_headers headers=base_headers,
) )
return TransHash(transaction_hash=response.json()['transaction_hash']) return TransHash(transaction_hash=response.json()["transaction_hash"])
def get_nfts(wallet_public_key: str) -> List[NftInfo]: def get_nfts(wallet_public_key: str) -> List[NftInfo]:
res = r.get(URL+f'/v1/wallets/{wallet_public_key}/nft/balance') res = r.get(URL + f"/v1/wallets/{wallet_public_key}/nft/balance")
print(res.json()) print(res.json())
return list( return list(
map( map(
lambda res: NftInfo( lambda res: NftInfo(uri=res["uri"], tokens=res["tokens"]),
uri=res['uri'], res.json()["balance"],
tokens=res['tokens'] ),
), )
res.json()['balance']
),
)
def get_history(wallet_public_key: str) -> List[TransactionHistory]: def get_history(wallet_public_key: str) -> List[TransactionHistory]:
res = r.post(URL+f'/v1/wallets/{wallet_public_key}/history', data=json.dumps({ res = r.post(
"page": 0, URL + f"/v1/wallets/{wallet_public_key}/history",
"offset": 100, data=json.dumps({"page": 0, "offset": 100, "sort": "asc"}),
"sort": "asc" headers=base_headers,
)
}), headers=base_headers)
return list( return list(
map( map(
lambda res: TransactionHistory( lambda res: TransactionHistory(
hash=res['hash'], hash=res["hash"],
timestamp=res['timeStamp'], timestamp=res["timeStamp"],
token_name=res['tokenName'], token_name=res["tokenName"],
from_wallet=res['from'], from_wallet=res["from"],
to_wallet=res['to'] to_wallet=res["to"],
),
res.json()['history']
), ),
) res.json()["history"],
),
)
def transfer_nft(my_private_wallet_key: str, transfer_publick_key: str, token_id: int) -> TransHash: def transfer_nft(
res = r.post(URL+'/v1/transfers/nft', data=json.dumps( my_private_wallet_key: str, transfer_publick_key: str, token_id: int
{ ) -> TransHash:
"fromPrivateKey": my_private_wallet_key, res = r.post(
"toPublicKey": transfer_publick_key, URL + "/v1/transfers/nft",
"tokenId": token_id data=json.dumps(
} {
), headers=base_headers) "fromPrivateKey": my_private_wallet_key,
return TransHash(transaction_hash=res.json()['transaction_hash']) "toPublicKey": transfer_publick_key,
"tokenId": token_id,
}
),
headers=base_headers,
)
return TransHash(transaction_hash=res.json()["transaction_hash"])
def get_balance(my_public_wallet_key: str) -> WalletBalance:
res = r.get(URL+f'/v1/wallets/{my_public_wallet_key}/balance') def get_balance(my_public_wallet_key: str) -> WalletBalance:
return WalletBalance(matic=res.json()['maticAmount'], coins=res.json()['coinsAmount']) res = r.get(URL + f"/v1/wallets/{my_public_wallet_key}/balance")
return WalletBalance(
matic=res.json()["maticAmount"], coins=res.json()["coinsAmount"]
)