From c17ac32c86cf31e924913eb96dfc4db87839d59a Mon Sep 17 00:00:00 2001 From: benarc Date: Wed, 22 Jul 2020 20:17:37 +0100 Subject: [PATCH] Fixed LNURLw migration --- lnbits/extensions/withdraw/crud.py | 14 ++--- lnbits/extensions/withdraw/migrations.py | 76 ++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/lnbits/extensions/withdraw/crud.py b/lnbits/extensions/withdraw/crud.py index 5121134..0d24aae 100644 --- a/lnbits/extensions/withdraw/crud.py +++ b/lnbits/extensions/withdraw/crud.py @@ -24,7 +24,7 @@ def create_withdraw_link( link_id = urlsafe_short_hash() db.execute( """ - INSERT INTO withdraw_links ( + INSERT INTO withdraw_link ( id, wallet, title, @@ -60,7 +60,7 @@ def create_withdraw_link( def get_withdraw_link(link_id: str, num=None) -> Optional[WithdrawLink]: with open_ext_db("withdraw") as db: - row = db.fetchone("SELECT * FROM withdraw_links WHERE id = ?", (link_id,)) + row = db.fetchone("SELECT * FROM withdraw_link WHERE id = ?", (link_id,)) link = [] for item in row: link.append(item) @@ -71,7 +71,7 @@ def get_withdraw_link(link_id: str, num=None) -> Optional[WithdrawLink]: def get_withdraw_link_by_hash(unique_hash: str, num=None) -> Optional[WithdrawLink]: with open_ext_db("withdraw") as db: - row = db.fetchone("SELECT * FROM withdraw_links WHERE unique_hash = ?", (unique_hash,)) + row = db.fetchone("SELECT * FROM withdraw_link WHERE unique_hash = ?", (unique_hash,)) link = [] for item in row: link.append(item) @@ -90,7 +90,7 @@ def get_withdraw_links(wallet_ids: Union[str, List[str]]) -> List[WithdrawLink]: with open_ext_db("withdraw") as db: q = ",".join(["?"] * len(wallet_ids)) - rows = db.fetchall(f"SELECT * FROM withdraw_links WHERE wallet IN ({q})", (*wallet_ids,)) + rows = db.fetchall(f"SELECT * FROM withdraw_link WHERE wallet IN ({q})", (*wallet_ids,)) return [WithdrawLink.from_row(row) for row in rows] @@ -98,15 +98,15 @@ def get_withdraw_links(wallet_ids: Union[str, List[str]]) -> List[WithdrawLink]: def update_withdraw_link(link_id: str, **kwargs) -> Optional[WithdrawLink]: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) with open_ext_db("withdraw") as db: - db.execute(f"UPDATE withdraw_links SET {q} WHERE id = ?", (*kwargs.values(), link_id)) - row = db.fetchone("SELECT * FROM withdraw_links WHERE id = ?", (link_id,)) + db.execute(f"UPDATE withdraw_link SET {q} WHERE id = ?", (*kwargs.values(), link_id)) + row = db.fetchone("SELECT * FROM withdraw_link WHERE id = ?", (link_id,)) return WithdrawLink.from_row(row) if row else None def delete_withdraw_link(link_id: str) -> None: with open_ext_db("withdraw") as db: - db.execute("DELETE FROM withdraw_links WHERE id = ?", (link_id,)) + db.execute("DELETE FROM withdraw_link WHERE id = ?", (link_id,)) def chunks(lst, n): for i in range(0, len(lst), n): diff --git a/lnbits/extensions/withdraw/migrations.py b/lnbits/extensions/withdraw/migrations.py index 717856f..49a6911 100644 --- a/lnbits/extensions/withdraw/migrations.py +++ b/lnbits/extensions/withdraw/migrations.py @@ -27,8 +27,84 @@ def m001_initial(db): ); """) +def m002_change_withdraw_table(db): + """ + Creates an improved withdraw table and migrates the existing data. + """ + db.execute( + """ + CREATE TABLE IF NOT EXISTS withdraw_link ( + id TEXT PRIMARY KEY, + wallet TEXT, + title TEXT, + min_withdrawable INTEGER DEFAULT 1, + max_withdrawable INTEGER DEFAULT 1, + uses INTEGER DEFAULT 1, + wait_time INTEGER, + is_unique INTEGER DEFAULT 0, + unique_hash TEXT UNIQUE, + k1 TEXT, + open_time INTEGER, + used INTEGER DEFAULT 0, + usescsv TEXT + ); + """ + ) + db.execute("CREATE INDEX IF NOT EXISTS wallet_idx ON withdraw_link (wallet)") + db.execute("CREATE UNIQUE INDEX IF NOT EXISTS unique_hash_idx ON withdraw_link (unique_hash)") + + for row in [list(row) for row in db.fetchall("SELECT * FROM withdraw_links")]: + usescsv = "" + + for i in range(row[5]): + if row[7]: + usescsv += "," + str(i + 1) + else: + usescsv += "," + str(1) + usescsv = usescsv[1:] + db.execute( + """ + INSERT INTO withdraw_link ( + id, + wallet, + title, + min_withdrawable, + max_withdrawable, + uses, + wait_time, + is_unique, + unique_hash, + k1, + open_time, + used, + usescsv + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + row[0], + row[1], + row[2], + row[3], + row[4], + row[5], + row[6], + row[7], + row[8], + row[9], + row[10], + row[11], + usescsv, + ), + ) + db.execute("DROP TABLE withdraw_links") def migrate(): with open_ext_db("withdraw") as db: m001_initial(db) + m002_change_withdraw_table(db) + + + +