63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info
|
|
from sanic import response
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
def valid_royalty_params(royalty_params):
|
|
assert sum([x['value'] for x in royalty_params]) == 10000, "Values of royalties should sum to 10000"
|
|
for field_key, field_value in {
|
|
'address': lambda x: isinstance(x, str),
|
|
'value': lambda x: (isinstance(x, int) and 0 <= x <= 10000)
|
|
}.items():
|
|
assert field_key in royalty_params, f"No {field_key} provided"
|
|
assert field_value(royalty_params[field_key]), f"Invalid {field_key} provided"
|
|
return True
|
|
|
|
|
|
async def s_api_v1_blockchain_send_new_content_message(request):
|
|
assert request.json, "No data provided"
|
|
assert request.ctx.user, "No authorized user provided"
|
|
|
|
for field_key, field_value in {
|
|
'title': lambda x: isinstance(x, str),
|
|
'authors': lambda x: isinstance(x, list),
|
|
'content': lambda x: isinstance(x, str),
|
|
'image': lambda x: isinstance(x, str),
|
|
'description': lambda x: isinstance(x, str),
|
|
'price': lambda x: (isinstance(x, str) and x.isdigit()),
|
|
'allowResale': lambda x: isinstance(x, bool),
|
|
'royaltyParams': lambda x: (isinstance(x, dict) and valid_royalty_params(x)),
|
|
|
|
}.items():
|
|
assert field_key in request.json, f"No {field_key} provided"
|
|
assert field_value(request.json[field_key]), f"Invalid {field_key} provided"
|
|
|
|
ton_connect, ton_connection = TonConnect.by_user(request.ctx.db_session, request.ctx.user, callback_fn=())
|
|
await ton_connect.restore_connection()
|
|
assert ton_connect.connected, "No connected wallet"
|
|
|
|
# await ton_connect._sdk_client.send_transaction({
|
|
# 'valid_until': int(datetime.now().timestamp()),
|
|
# 'messages': [
|
|
# {
|
|
# 'address':
|
|
# }
|
|
# ]
|
|
# })
|
|
|
|
|
|
return response.json({"message": "Transaction requested"})
|
|
|
|
|
|
async def s_api_v1_blockchain_send_purchase_content_message(request):
|
|
assert request.json, "No data provided"
|
|
|
|
for field_key, field_value in {
|
|
'content_address': lambda x: isinstance(x, str),
|
|
'price': lambda x: (isinstance(x, str) and x.isdigit()),
|
|
}.items():
|
|
assert field_key in request.json, f"No {field_key} provided"
|
|
assert field_value(request.json[field_key]), f"Invalid {field_key} provided"
|
|
|
|
return response.json({"message": "Transaction requested"})
|