diff --git a/lnbits/extensions/tpos/crud.py b/lnbits/extensions/tpos/crud.py index 8f071d8cc..94e2c0068 100644 --- a/lnbits/extensions/tpos/crud.py +++ b/lnbits/extensions/tpos/crud.py @@ -30,7 +30,7 @@ async def create_tpos(wallet_id: str, data: CreateTposData) -> TPoS: async def get_tpos(tpos_id: str) -> Optional[TPoS]: row = await db.fetchone("SELECT * FROM tpos.tposs WHERE id = ?", (tpos_id,)) - return TPoS.from_row(row) if row else None + return TPoS(**row) if row else None async def get_tposs(wallet_ids: Union[str, List[str]]) -> List[TPoS]: @@ -42,7 +42,7 @@ async def get_tposs(wallet_ids: Union[str, List[str]]) -> List[TPoS]: f"SELECT * FROM tpos.tposs WHERE wallet IN ({q})", (*wallet_ids,) ) - return [TPoS.from_row(row) for row in rows] + return [TPoS(**row) for row in rows] async def delete_tpos(tpos_id: str) -> None: diff --git a/lnbits/extensions/tpos/models.py b/lnbits/extensions/tpos/models.py index 6a2ff1d2c..36bca79be 100644 --- a/lnbits/extensions/tpos/models.py +++ b/lnbits/extensions/tpos/models.py @@ -1,13 +1,15 @@ from sqlite3 import Row +from typing import Optional +from fastapi import Query from pydantic import BaseModel class CreateTposData(BaseModel): name: str currency: str - tip_options: str - tip_wallet: str + tip_options: str = Query(None) + tip_wallet: str = Query(None) class TPoS(BaseModel): @@ -15,8 +17,8 @@ class TPoS(BaseModel): wallet: str name: str currency: str - tip_options: str - tip_wallet: str + tip_options: Optional[str] + tip_wallet: Optional[str] @classmethod def from_row(cls, row: Row) -> "TPoS": diff --git a/lnbits/extensions/tpos/tasks.py b/lnbits/extensions/tpos/tasks.py index 01c11428d..af9663cc9 100644 --- a/lnbits/extensions/tpos/tasks.py +++ b/lnbits/extensions/tpos/tasks.py @@ -26,7 +26,6 @@ async def on_invoice_paid(payment: Payment) -> None: # now we make some special internal transfers (from no one to the receiver) tpos = await get_tpos(payment.extra.get("tposId")) - tipAmount = payment.extra.get("tipAmount") if tipAmount is None: @@ -34,6 +33,7 @@ async def on_invoice_paid(payment: Payment) -> None: return tipAmount = tipAmount * 1000 + amount = payment.amount - tipAmount # mark the original payment with one extra key, "splitted" # (this prevents us from doing this process again and it's informative) @@ -41,13 +41,13 @@ async def on_invoice_paid(payment: Payment) -> None: await core_db.execute( """ UPDATE apipayments - SET extra = ?, amount = amount - ? + SET extra = ?, amount = ? WHERE hash = ? AND checking_id NOT LIKE 'internal_%' """, ( json.dumps(dict(**payment.extra, tipSplitted=True)), - tipAmount, + amount, payment.payment_hash, ), ) @@ -60,7 +60,7 @@ async def on_invoice_paid(payment: Payment) -> None: payment_request="", payment_hash=payment.payment_hash, amount=tipAmount, - memo=payment.memo, + memo=f"Tip for {payment.memo}", pending=False, extra={"tipSplitted": True}, ) diff --git a/lnbits/extensions/tpos/templates/tpos/index.html b/lnbits/extensions/tpos/templates/tpos/index.html index 76f330007..edbb2aa87 100644 --- a/lnbits/extensions/tpos/templates/tpos/index.html +++ b/lnbits/extensions/tpos/templates/tpos/index.html @@ -54,8 +54,8 @@ > - {{ (col.name == 'tip_options' ? JSON.parse(col.value).join(", ") - : col.value) }} + {{ (col.name == 'tip_options' && col.value ? + JSON.parse(col.value).join(", ") : col.value) }}

{% raw %}{{ famount }}{% endraw %}

- {% raw %}{{ fsat }}{% endraw %} sat + {% raw %}{{ fsat }} + sat + ( + {{ tipAmountSat }} tip) + {% endraw %}
@@ -310,7 +313,6 @@ return Math.ceil((this.tipAmount / this.exchangeRate) * 100000000) }, fsat: function () { - console.log('sat', this.sat, LNbits.utils.formatSat(this.sat)) return LNbits.utils.formatSat(this.sat) } }, @@ -362,7 +364,6 @@ showInvoice: function () { var self = this var dialog = this.invoiceDialog - console.log(this.sat, this.tposId) axios .post('/tpos/api/v1/tposs/' + this.tposId + '/invoices', null, { params: { diff --git a/lnbits/extensions/tpos/views_api.py b/lnbits/extensions/tpos/views_api.py index 9567f98a6..9609956ec 100644 --- a/lnbits/extensions/tpos/views_api.py +++ b/lnbits/extensions/tpos/views_api.py @@ -17,7 +17,7 @@ from .models import CreateTposData @tpos_ext.get("/api/v1/tposs", status_code=HTTPStatus.OK) async def api_tposs( - all_wallets: bool = Query(None), wallet: WalletTypeInfo = Depends(get_key_type) + all_wallets: bool = Query(False), wallet: WalletTypeInfo = Depends(get_key_type) ): wallet_ids = [wallet.wallet.id] if all_wallets: @@ -63,6 +63,9 @@ async def api_tpos_create_invoice( status_code=HTTPStatus.NOT_FOUND, detail="TPoS does not exist." ) + if tipAmount: + amount += tipAmount + try: payment_hash, payment_request = await create_invoice( wallet_id=tpos.wallet,