from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, JSON, Boolean from sqlalchemy.orm import relationship from datetime import datetime from .base import AlchemyBase class WalletConnection(AlchemyBase): __tablename__ = 'wallet_connections' id = Column(Integer, autoincrement=True, primary_key=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=False) network = Column(String(32), nullable=False) wallet_key = Column(String(256), nullable=False) connection_id = Column(String(2048), nullable=False, unique=True) wallet_address = Column(String(1024), nullable=False) keys = Column(JSON, nullable=False, default=dict) meta = Column(JSON, nullable=False, default=dict) created = Column(DateTime, nullable=False, default=datetime.utcnow) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) invalidated = Column(Boolean, nullable=False, default=True) without_pk = Column(Boolean, nullable=False, default=False) user = relationship('User', uselist=False, back_populates='wallet_connections', foreign_keys=[user_id]) @property def ton_balance(self): return round(int(self.meta.get('wallet_ton_balance', 0)) / 1e9, 9) def json_format(self): return { 'version': self.meta.get('wallet_contract_version', 'uv'), # uv = unknown version 'address': self.wallet_address, 'ton_balance': self.meta.get('wallet_ton_balance', 0), }