diff --git a/app/__main__.py b/app/__main__.py index 07f9ec7..3256d66 100644 --- a/app/__main__.py +++ b/app/__main__.py @@ -1,6 +1,8 @@ +import sys import traceback from asyncio import sleep from datetime import datetime +import asyncio, sys from aiogram import Bot @@ -58,13 +60,38 @@ async def execute_queue(app): if __name__ == '__main__': - app.ctx.memory = Memory() - app.ctx.memory._telegram_bot = Bot(TELEGRAM_API_KEY) - dp._s_memory = app.ctx.memory - app.ctx.memory._app = app + startup_target = '__main__' + try: + startup_target = sys.argv[3] + except IndexError: + pass - app.add_task(execute_queue(app)) - app.add_task(queue_daemon(app)) - app.add_task(dp.start_polling(app.ctx.memory._telegram_bot)) + if startup_target == '__main__': + app.ctx.memory = Memory() + app.ctx.memory._telegram_bot = Bot(TELEGRAM_API_KEY) + dp._s_memory = app.ctx.memory + app.ctx.memory._app = app - app.run(host='0.0.0.0', port=SANIC_PORT) + app.add_task(execute_queue(app)) + app.add_task(queue_daemon(app)) + app.add_task(dp.start_polling(app.ctx.memory._telegram_bot)) + + app.run(host='0.0.0.0', port=SANIC_PORT) + else: + loop = asyncio.get_event_loop() + startup_fn = None + if startup_target == 'indexator': + from app.core.background.indexator_service import main as target_fn + elif startup_target == 'uploader': + from app.core.background.uploader_service import main as target_fn + + startup_fn = startup_fn or target_fn + assert startup_fn + + try: + loop.run_until_complete(startup_fn()) + except BaseException as e: + make_log(startup_target[0].upper() + startup_target[1:], f"Error: {e}" + '\n' + str(traceback.format_exc()), level='error') + sys.exit(1) + finally: + loop.close() diff --git a/app/api/routes/_blockchain.py b/app/api/routes/_blockchain.py index 5e16143..1ebfa92 100644 --- a/app/api/routes/_blockchain.py +++ b/app/api/routes/_blockchain.py @@ -1,5 +1,6 @@ - +from app.core.models._blockchain.ton.connect import TonConnect, unpack_wallet_info from sanic import response +from datetime import datetime, timedelta def valid_royalty_params(royalty_params): @@ -15,6 +16,7 @@ def valid_royalty_params(royalty_params): 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), @@ -30,7 +32,20 @@ async def s_api_v1_blockchain_send_new_content_message(request): assert field_key in request.json, f"No {field_key} provided" assert field_value(request.json[field_key]), f"Invalid {field_key} provided" - assert request.json.get("title"), "No title 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"}) diff --git a/app/core/background/indexator_service.py b/app/core/background/indexator_service.py new file mode 100644 index 0000000..f40fd93 --- /dev/null +++ b/app/core/background/indexator_service.py @@ -0,0 +1,17 @@ + +from app.core.logger import make_log +import asyncio + + +async def main(): + make_log("Indexator", "Service started", level="info") + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() + + + + diff --git a/app/core/background/uploader_service.py b/app/core/background/uploader_service.py new file mode 100644 index 0000000..c718eb9 --- /dev/null +++ b/app/core/background/uploader_service.py @@ -0,0 +1,17 @@ + +from app.core.logger import make_log +import asyncio + + +async def main(): + make_log("Uploader", "Service started", level="info") + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() + + + + diff --git a/docker-compose.yml b/docker-compose.yml index afb4bac..8910a75 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,3 +31,35 @@ services: depends_on: maria_db: condition: service_healthy + + indexator: + build: + context: . + dockerfile: Dockerfile + command: python -m app indexator + env_file: + - .env + links: + - maria_db + volumes: + - ./logs:/app/logs + - ./storedContent:/app/data + depends_on: + maria_db: + condition: service_healthy + + uploader: + build: + context: . + dockerfile: Dockerfile + command: python -m app uploader + env_file: + - .env + links: + - maria_db + volumes: + - ./logs:/app/logs + - ./storedContent:/app/data + depends_on: + maria_db: + condition: service_healthy