mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2024-11-19 01:43:42 +01:00
fix: show proper total balances fix cleanups (#2490)
payments are not deleted oif we delete a wallets, so to get a accurate total representation of the lnbits balance we need to create the balances view based on the wallets table, not payments, else deleted balances will still show up. 2nd, delete_unused_wallets and delete_accounts was never working if because they never got an updated_at time, so i just check if its null else i check to timedelta on created_at
This commit is contained in:
parent
a5623ef7c3
commit
32596758cc
@ -206,7 +206,7 @@ async def database_delete_wallet(wallet: str):
|
|||||||
@click.option("-c", "--checking-id", required=True, help="Payment checking Id.")
|
@click.option("-c", "--checking-id", required=True, help="Payment checking Id.")
|
||||||
@coro
|
@coro
|
||||||
async def database_delete_wallet_payment(wallet: str, checking_id: str):
|
async def database_delete_wallet_payment(wallet: str, checking_id: str):
|
||||||
"""Mark wallet as deleted"""
|
"""Delete wallet payment"""
|
||||||
async with core_db.connect() as conn:
|
async with core_db.connect() as conn:
|
||||||
await delete_wallet_payment(
|
await delete_wallet_payment(
|
||||||
wallet_id=wallet, checking_id=checking_id, conn=conn
|
wallet_id=wallet, checking_id=checking_id, conn=conn
|
||||||
|
@ -207,14 +207,21 @@ async def delete_accounts_no_wallets(
|
|||||||
time_delta: int,
|
time_delta: int,
|
||||||
conn: Optional[Connection] = None,
|
conn: Optional[Connection] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
delta = int(time()) - time_delta
|
||||||
await (conn or db).execute(
|
await (conn or db).execute(
|
||||||
f"""
|
f"""
|
||||||
DELETE FROM accounts
|
DELETE FROM accounts
|
||||||
WHERE NOT EXISTS (
|
WHERE NOT EXISTS (
|
||||||
SELECT wallets.id FROM wallets WHERE wallets.user = accounts.id
|
SELECT wallets.id FROM wallets WHERE wallets.user = accounts.id
|
||||||
) AND updated_at < {db.timestamp_placeholder}
|
) AND (
|
||||||
|
(updated_at is null AND created_at < {db.timestamp_placeholder})
|
||||||
|
OR updated_at < {db.timestamp_placeholder}
|
||||||
|
)
|
||||||
""",
|
""",
|
||||||
(int(time()) - time_delta,),
|
(
|
||||||
|
delta,
|
||||||
|
delta,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -588,14 +595,21 @@ async def delete_unused_wallets(
|
|||||||
time_delta: int,
|
time_delta: int,
|
||||||
conn: Optional[Connection] = None,
|
conn: Optional[Connection] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
delta = int(time()) - time_delta
|
||||||
await (conn or db).execute(
|
await (conn or db).execute(
|
||||||
f"""
|
f"""
|
||||||
DELETE FROM wallets
|
DELETE FROM wallets
|
||||||
WHERE (
|
WHERE (
|
||||||
SELECT COUNT(*) FROM apipayments WHERE wallet = wallets.id
|
SELECT COUNT(*) FROM apipayments WHERE wallet = wallets.id
|
||||||
) = 0 AND updated_at < {db.timestamp_placeholder}
|
) = 0 AND (
|
||||||
|
(updated_at is null AND created_at < {db.timestamp_placeholder})
|
||||||
|
OR updated_at < {db.timestamp_placeholder}
|
||||||
|
)
|
||||||
""",
|
""",
|
||||||
(int(time()) - time_delta,),
|
(
|
||||||
|
delta,
|
||||||
|
delta,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -491,3 +491,24 @@ async def m018_balances_view_exclude_deleted(db):
|
|||||||
GROUP BY wallet
|
GROUP BY wallet
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def m019_balances_view_based_on_wallets(db):
|
||||||
|
"""
|
||||||
|
Make deleted wallets not show up in the balances view.
|
||||||
|
Important for querying whole lnbits balances.
|
||||||
|
"""
|
||||||
|
await db.execute("DROP VIEW balances")
|
||||||
|
await db.execute(
|
||||||
|
"""
|
||||||
|
CREATE VIEW balances AS
|
||||||
|
SELECT apipayments.wallet,
|
||||||
|
SUM(apipayments.amount - ABS(apipayments.fee)) AS balance
|
||||||
|
FROM wallets
|
||||||
|
LEFT JOIN apipayments ON apipayments.wallet = wallets.id
|
||||||
|
WHERE (wallets.deleted = false OR wallets.deleted is NULL)
|
||||||
|
AND ((apipayments.pending = false AND apipayments.amount > 0)
|
||||||
|
OR apipayments.amount < 0)
|
||||||
|
GROUP BY apipayments.wallet
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user