diff --git a/database.py b/database.py new file mode 100644 index 0000000000000000000000000000000000000000..9f86a6d3773629e2ca5efb797998e00463969465 --- /dev/null +++ b/database.py @@ -0,0 +1,67 @@ +from peewee import MySQLDatabase, Model, CharField, BlobField, AutoField +from peewee import IntegerField, ForeignKeyField, DoubleField +import os + +db = MySQLDatabase(None) + +def connect(create_tables=False) -> None: + """Initializes the database session and connects to the database + :param create_tables: Creates database tables [default: False] + """ + user = os.getenv("DB_USER") + pw = os.getenv("DB_PASSWORD") + host = os.getenv("DB_HOST") + port = os.getenv("DB_PORT") + name = os.getenv("DB_DATABASE") + db.init(name, host=host, port=int(port), user=user, password=pw) + db.connect() + + if create_tables: + db.create_tables([State, User, Wallet, + WalletRequest, UserWallet, PendingTX]) + +class BaseModel(Model): + id = AutoField() + class Meta: + database = db + + +class State(BaseModel): + message = CharField() + menu = CharField() + prev_state = IntegerField() + + +class User(BaseModel): + telegram_id = IntegerField() + state_id = ForeignKeyField(State) + nickname = CharField() + variables = CharField() + + +class Wallet(BaseModel): + max_co_signers = IntegerField() + min_co_signers = IntegerField() + initiator_user_id = ForeignKeyField(User, backref='users') + name = CharField() + + +class WalletRequest(BaseModel): + token = CharField() + wallet_id = ForeignKeyField(User, backref='walletrequests') + + +class UserWallet(BaseModel): + user_id = ForeignKeyField(User, backref='wallets') + wallet_id = ForeignKeyField(Wallet, backref='wallets') + + +class PendingTX(BaseModel): + from_wallet_id = ForeignKeyField(Wallet, backref='pendingtx') + to_address = CharField() + amount = DoubleField() + fee_sat_per_byte = IntegerField() + status = IntegerField() + sign_count = IntegerField() + raw_data = BlobField() + txid = BlobField() diff --git a/requirements.txt b/requirements.txt index b4fae21037162df8b3163b3e30256cb0210279a6..ebd2f51ed931482ae61e36dc755f8acd85b454c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ python-dotenv~=0.19.2 bitcoinlib~=0.6.4 python-telegram-bot~=13.11 -mysqlclient~=2.1.0 \ No newline at end of file +mysqlclient~=2.1.0 +peewee==3.14.10