uploader-bot/app/core/models/transaction.py

64 lines
2.7 KiB
Python

from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean, Float
from sqlalchemy.orm import relationship
from datetime import datetime
from .base import AlchemyBase
class UserBalance(AlchemyBase):
__tablename__ = 'user_balances'
id = Column(Integer, autoincrement=True, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
asset_id = Column(Integer, ForeignKey('assets.id'), nullable=False)
balance = Column(Float, nullable=False, default=0)
updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, foreign_keys=[user_id], back_populates='balances')
asset = relationship('Asset', uselist=False, foreign_keys=[asset_id], back_populates='balances')
class InternalTransaction(AlchemyBase):
__tablename__ = 'internal_transactions'
id = Column(Integer, autoincrement=True, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
asset_id = Column(Integer, ForeignKey('assets.id'), nullable=False)
amount = Column(Float, nullable=False)
is_spent = Column(Boolean, nullable=False) # transaction type
spent_transaction_id = Column(Integer, ForeignKey('internal_transactions.id'), nullable=True)
type = Column(String(256), nullable=False, default="NOT_SPECIFIED")
created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, back_populates='internal_transactions', foreign_keys=[user_id])
asset = relationship('Asset', uselist=False, foreign_keys=[asset_id])
spent_transaction = relationship('InternalTransaction', uselist=False, foreign_keys=[spent_transaction_id])
class StarsInvoice(AlchemyBase):
__tablename__ = 'stars_invoices'
id = Column(Integer, autoincrement=True, primary_key=True)
external_id = Column(String(1024), nullable=False)
type = Column(String(256), nullable=False)
amount = Column(Integer, nullable=False)
user_id = Column(Integer, ForeignKey('users.id'), nullable=True)
content_hash = Column(String(256), nullable=True)
telegram_id = Column(Integer, nullable=True)
invoice_url = Column(String(256), nullable=True)
paid = Column(Boolean, nullable=False, default=False)
paid_at = Column(DateTime, nullable=True)
payment_tx_id = Column(String(256), nullable=True)
payment_node_id = Column(String(128), nullable=True)
payment_node_public_host = Column(String(256), nullable=True)
bot_username = Column(String(128), nullable=True)
is_remote = Column(Boolean, nullable=False, default=False)
created = Column(DateTime, nullable=False, default=datetime.utcnow)