license_service
This commit is contained in:
1 parent
752f42ba02
commit
839655b163
4 files changed
+169
-10
No files matched your search
@@ -1,8 +1,9 @@
|
||||
import asyncio
|
||||
from base64 import b64decode
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from base58 import b58encode
|
||||
from sqlalchemy import and_
|
||||
from tonsdk.boc import Cell
|
||||
from tonsdk.utils import Address
|
||||
|
||||
@@ -11,11 +12,14 @@ from app.core._blockchain.ton.toncenter import toncenter
|
||||
from app.core._utils.send_status import send_status
|
||||
from app.core.logger import make_log
|
||||
from app.core.models.node_storage import StoredContent
|
||||
from app.core.models.content.user_content import UserContent, UserAction
|
||||
from app.core._utils.resolve_content import resolve_content
|
||||
from app.core.models.wallet_connection import WalletConnection
|
||||
from app.core._keyboards import get_inline_keyboard
|
||||
from app.core.models._telegram import Wrapped_CBotChat
|
||||
from app.core.storage import db_session
|
||||
from app.core._config import CLIENT_TELEGRAM_API_KEY
|
||||
from app.core.models.user import User
|
||||
import os
|
||||
import traceback
|
||||
|
||||
@@ -23,7 +27,54 @@ import traceback
|
||||
async def license_index_loop(memory, platform_found: bool, seqno: int) -> [bool, int]:
|
||||
make_log("LicenseIndex", "Service running", level="debug")
|
||||
with db_session() as session:
|
||||
pass
|
||||
for user in session.query(User).filter(
|
||||
User.last_use > datetime.now() - timedelta(minutes=10)
|
||||
).all():
|
||||
try:
|
||||
await user.scan_owned_user_content(session)
|
||||
except BaseException as e:
|
||||
make_log("LicenseIndex", f"Error: {e}" + '\n' + traceback.format_exc(), level="error")
|
||||
|
||||
for content in session.query(UserContent).filter(
|
||||
and_(
|
||||
UserContent.startswith('nft/'),
|
||||
UserContent.updated < (datetime.now() - timedelta(minutes=15)),
|
||||
)
|
||||
):
|
||||
try:
|
||||
await content.sync_with_chain(session)
|
||||
except BaseException as e:
|
||||
make_log("LicenseIndex", f"Error: {e}" + '\n' + traceback.format_exc(), level="error")
|
||||
|
||||
for action in session.query(UserAction).filter(
|
||||
and_(
|
||||
UserAction.type == 'purchase',
|
||||
# UserAction.updated < (datetime.now() - timedelta(minutes=5)),
|
||||
UserAction.status == 'requested',
|
||||
)
|
||||
):
|
||||
try:
|
||||
user = session.query(User).filter_by(id=action.user_id).first()
|
||||
chat_wrap = Wrapped_CBotChat(CLIENT_TELEGRAM_API_KEY, chat_id=user.telegram_id, db_session=session, user=user)
|
||||
content = session.query(StoredContent).filter_by(id=action.content_id).first()
|
||||
|
||||
if (datetime.now() - action.updated) > timedelta(minutes=5):
|
||||
if action.telegram_message_id:
|
||||
await chat_wrap.delete_message(action.telegram_message_id)
|
||||
|
||||
make_log("LicenseIndex", f"Action timeout: {action.id}", level="info")
|
||||
action.status = 'canceled'
|
||||
else:
|
||||
user_wallet_address = user.wallet_address(session)
|
||||
user_content = session.query(UserContent).filter_by(content_id=action.content_id, status='active', owner_address=user_wallet_address).first()
|
||||
if user_content:
|
||||
make_log("LicenseIndex", f"User already has content: {user_content.content_id}", level="info")
|
||||
action.status = 'success'
|
||||
|
||||
session.commit()
|
||||
await chat_wrap.send_content(session, content)
|
||||
except BaseException as e:
|
||||
make_log("LicenseIndex", f"Error: {e}" + '\n' + traceback.format_exc(), level="error")
|
||||
|
||||
return platform_found, seqno
|
||||
|
||||
|
||||
Reference in new issue
Block a user