actually do the fee abs() thing on the balances view.

This commit is contained in:
fiatjaf 2021-03-31 20:09:33 -03:00
parent 045e069312
commit 11679a4fa7
2 changed files with 27 additions and 1 deletions

View File

@ -135,3 +135,29 @@ async def m003_add_invoice_webhook(db):
await db.execute("ALTER TABLE apipayments ADD COLUMN webhook TEXT")
await db.execute("ALTER TABLE apipayments ADD COLUMN webhook_status TEXT")
async def m004_ensure_fees_are_always_negative(db):
"""
Use abs() so wallet backends don't have to care about the sign of the fees.
"""
await db.execute("DROP VIEW balances")
await db.execute(
"""
CREATE VIEW IF NOT EXISTS balances AS
SELECT wallet, COALESCE(SUM(s), 0) AS balance FROM (
SELECT wallet, SUM(amount) AS s -- incoming
FROM apipayments
WHERE amount > 0 AND pending = 0 -- don't sum pending
GROUP BY wallet
UNION ALL
SELECT wallet, SUM(amount - abs(fee)) AS s -- outgoing, sum fees
FROM apipayments
WHERE amount < 0 -- do sum pending
GROUP BY wallet
)
GROUP BY wallet;
"""
)

View File

@ -154,7 +154,7 @@ async def pay_invoice(
if payment.checking_id:
await create_payment(
checking_id=payment.checking_id,
fee=-abs(payment.fee_msat),
fee=payment.fee_msat,
preimage=payment.preimage,
pending=payment.ok == None,
conn=conn,