mirror of
https://github.com/lnbits/lnbits.git
synced 2025-06-18 21:01:12 +02:00
commit
f6ec1bc92c
@ -8,7 +8,7 @@ from .models import Tip, TipJar, createTipJar
|
|||||||
|
|
||||||
|
|
||||||
async def create_tip(
|
async def create_tip(
|
||||||
id: int, wallet: str, message: str, name: str, sats: int, tipjar: str
|
id: str, wallet: str, message: str, name: str, sats: int, tipjar: str
|
||||||
) -> Tip:
|
) -> Tip:
|
||||||
"""Create a new Tip"""
|
"""Create a new Tip"""
|
||||||
await db.execute(
|
await db.execute(
|
||||||
@ -33,11 +33,7 @@ async def create_tip(
|
|||||||
|
|
||||||
async def create_tipjar(data: createTipJar) -> TipJar:
|
async def create_tipjar(data: createTipJar) -> TipJar:
|
||||||
"""Create a new TipJar"""
|
"""Create a new TipJar"""
|
||||||
|
await db.execute(
|
||||||
returning = "" if db.type == SQLITE else "RETURNING ID"
|
|
||||||
method = db.execute if db.type == SQLITE else db.fetchone
|
|
||||||
|
|
||||||
result = await (method)(
|
|
||||||
f"""
|
f"""
|
||||||
INSERT INTO tipjar.TipJars (
|
INSERT INTO tipjar.TipJars (
|
||||||
name,
|
name,
|
||||||
@ -46,16 +42,11 @@ async def create_tipjar(data: createTipJar) -> TipJar:
|
|||||||
onchain
|
onchain
|
||||||
)
|
)
|
||||||
VALUES (?, ?, ?, ?)
|
VALUES (?, ?, ?, ?)
|
||||||
{returning}
|
|
||||||
""",
|
""",
|
||||||
(data.name, data.wallet, data.webhook, data.onchain),
|
(data.name, data.wallet, data.webhook, data.onchain),
|
||||||
)
|
)
|
||||||
if db.type == SQLITE:
|
row = await db.fetchone("SELECT * FROM tipjar.TipJars LIMIT 1")
|
||||||
tipjar_id = result._result_proxy.lastrowid
|
tipjar = TipJar(**row)
|
||||||
else:
|
|
||||||
tipjar_id = result[0]
|
|
||||||
|
|
||||||
tipjar = await get_tipjar(tipjar_id)
|
|
||||||
assert tipjar
|
assert tipjar
|
||||||
return tipjar
|
return tipjar
|
||||||
|
|
||||||
|
@ -1,20 +1,7 @@
|
|||||||
from sqlite3 import Row
|
from sqlite3 import Row
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from fastapi.param_functions import Query
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from pydantic.main import BaseModel
|
|
||||||
|
|
||||||
|
|
||||||
class CreateCharge(BaseModel):
|
|
||||||
onchainwallet: str = Query(None)
|
|
||||||
lnbitswallet: str = Query(None)
|
|
||||||
description: str = Query(...)
|
|
||||||
webhook: str = Query(None)
|
|
||||||
completelink: str = Query(None)
|
|
||||||
completelinktext: str = Query(None)
|
|
||||||
time: int = Query(..., ge=1)
|
|
||||||
amount: int = Query(..., ge=1)
|
|
||||||
|
|
||||||
|
|
||||||
class createTip(BaseModel):
|
class createTip(BaseModel):
|
||||||
@ -44,8 +31,8 @@ class Tip(BaseModel):
|
|||||||
class createTipJar(BaseModel):
|
class createTipJar(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
wallet: str
|
wallet: str
|
||||||
webhook: str = None
|
webhook: Optional[str]
|
||||||
onchain: str = None
|
onchain: Optional[str]
|
||||||
|
|
||||||
|
|
||||||
class createTips(BaseModel):
|
class createTips(BaseModel):
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Depends, Request
|
||||||
from fastapi.param_functions import Query
|
from fastapi.param_functions import Query
|
||||||
from fastapi.params import Depends
|
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from starlette.exceptions import HTTPException
|
from starlette.exceptions import HTTPException
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi.param_functions import Query
|
from fastapi import Depends, Query
|
||||||
from fastapi.params import Depends
|
|
||||||
from starlette.exceptions import HTTPException
|
from starlette.exceptions import HTTPException
|
||||||
|
|
||||||
from lnbits.core.crud import get_user
|
from lnbits.core.crud import get_user
|
||||||
from lnbits.decorators import WalletTypeInfo, get_key_type
|
from lnbits.decorators import WalletTypeInfo, get_key_type
|
||||||
|
|
||||||
from ..satspay.crud import create_charge
|
from ..satspay.crud import create_charge
|
||||||
|
from ..satspay.models import CreateCharge
|
||||||
from . import tipjar_ext
|
from . import tipjar_ext
|
||||||
from .crud import (
|
from .crud import (
|
||||||
create_tip,
|
create_tip,
|
||||||
@ -22,7 +22,7 @@ from .crud import (
|
|||||||
update_tipjar,
|
update_tipjar,
|
||||||
)
|
)
|
||||||
from .helpers import get_charge_details
|
from .helpers import get_charge_details
|
||||||
from .models import CreateCharge, createTipJar, createTips
|
from .models import createTip, createTipJar, createTips
|
||||||
|
|
||||||
|
|
||||||
@tipjar_ext.post("/api/v1/tipjars")
|
@tipjar_ext.post("/api/v1/tipjars")
|
||||||
@ -43,12 +43,16 @@ async def user_from_wallet(wallet: WalletTypeInfo = Depends(get_key_type)):
|
|||||||
@tipjar_ext.post("/api/v1/tips")
|
@tipjar_ext.post("/api/v1/tips")
|
||||||
async def api_create_tip(data: createTips):
|
async def api_create_tip(data: createTips):
|
||||||
"""Take data from tip form and return satspay charge"""
|
"""Take data from tip form and return satspay charge"""
|
||||||
sats = data.sats
|
sats = int(data.sats)
|
||||||
message = data.message
|
message = data.message
|
||||||
if not message:
|
if not message:
|
||||||
message = "No message"
|
message = "No message"
|
||||||
tipjar_id = data.tipjar
|
tipjar_id = int(data.tipjar)
|
||||||
tipjar = await get_tipjar(tipjar_id)
|
tipjar = await get_tipjar(tipjar_id)
|
||||||
|
if not tipjar:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.NOT_FOUND, detail="Tipjar does not exist."
|
||||||
|
)
|
||||||
|
|
||||||
webhook = tipjar.webhook
|
webhook = tipjar.webhook
|
||||||
charge_details = await get_charge_details(tipjar.id)
|
charge_details = await get_charge_details(tipjar.id)
|
||||||
@ -62,13 +66,14 @@ async def api_create_tip(data: createTips):
|
|||||||
user=charge_details["user"],
|
user=charge_details["user"],
|
||||||
data=CreateCharge(
|
data=CreateCharge(
|
||||||
amount=sats,
|
amount=sats,
|
||||||
webhook=webhook,
|
webhook=webhook or "",
|
||||||
description=description,
|
description=description,
|
||||||
onchainwallet=charge_details["onchainwallet"],
|
onchainwallet=charge_details["onchainwallet"],
|
||||||
lnbitswallet=charge_details["lnbitswallet"],
|
lnbitswallet=charge_details["lnbitswallet"],
|
||||||
completelink=charge_details["completelink"],
|
completelink=charge_details["completelink"],
|
||||||
completelinktext=charge_details["completelinktext"],
|
completelinktext=charge_details["completelinktext"],
|
||||||
time=charge_details["time"],
|
time=charge_details["time"],
|
||||||
|
custom_css="",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -77,7 +82,7 @@ async def api_create_tip(data: createTips):
|
|||||||
wallet=tipjar.wallet,
|
wallet=tipjar.wallet,
|
||||||
message=message,
|
message=message,
|
||||||
name=name,
|
name=name,
|
||||||
sats=data.sats,
|
sats=int(data.sats),
|
||||||
tipjar=data.tipjar,
|
tipjar=data.tipjar,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -87,28 +92,34 @@ async def api_create_tip(data: createTips):
|
|||||||
@tipjar_ext.get("/api/v1/tipjars")
|
@tipjar_ext.get("/api/v1/tipjars")
|
||||||
async def api_get_tipjars(wallet: WalletTypeInfo = Depends(get_key_type)):
|
async def api_get_tipjars(wallet: WalletTypeInfo = Depends(get_key_type)):
|
||||||
"""Return list of all tipjars assigned to wallet with given invoice key"""
|
"""Return list of all tipjars assigned to wallet with given invoice key"""
|
||||||
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
|
user = await get_user(wallet.wallet.user)
|
||||||
|
if not user:
|
||||||
|
return []
|
||||||
tipjars = []
|
tipjars = []
|
||||||
for wallet_id in wallet_ids:
|
for wallet_id in user.wallet_ids:
|
||||||
new_tipjars = await get_tipjars(wallet_id)
|
new_tipjars = await get_tipjars(wallet_id)
|
||||||
tipjars += new_tipjars if new_tipjars else []
|
tipjars += new_tipjars if new_tipjars else []
|
||||||
return [tipjar.dict() for tipjar in tipjars] if tipjars else []
|
return [tipjar.dict() for tipjar in tipjars]
|
||||||
|
|
||||||
|
|
||||||
@tipjar_ext.get("/api/v1/tips")
|
@tipjar_ext.get("/api/v1/tips")
|
||||||
async def api_get_tips(wallet: WalletTypeInfo = Depends(get_key_type)):
|
async def api_get_tips(wallet: WalletTypeInfo = Depends(get_key_type)):
|
||||||
"""Return list of all tips assigned to wallet with given invoice key"""
|
"""Return list of all tips assigned to wallet with given invoice key"""
|
||||||
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
|
user = await get_user(wallet.wallet.user)
|
||||||
|
if not user:
|
||||||
|
return []
|
||||||
tips = []
|
tips = []
|
||||||
for wallet_id in wallet_ids:
|
for wallet_id in user.wallet_ids:
|
||||||
new_tips = await get_tips(wallet_id)
|
new_tips = await get_tips(wallet_id)
|
||||||
tips += new_tips if new_tips else []
|
tips += new_tips if new_tips else []
|
||||||
return [tip.dict() for tip in tips] if tips else []
|
return [tip.dict() for tip in tips]
|
||||||
|
|
||||||
|
|
||||||
@tipjar_ext.put("/api/v1/tips/{tip_id}")
|
@tipjar_ext.put("/api/v1/tips/{tip_id}")
|
||||||
async def api_update_tip(
|
async def api_update_tip(
|
||||||
wallet: WalletTypeInfo = Depends(get_key_type), tip_id: str = Query(None)
|
data: createTip,
|
||||||
|
wallet: WalletTypeInfo = Depends(get_key_type),
|
||||||
|
tip_id: str = Query(None),
|
||||||
):
|
):
|
||||||
"""Update a tip with the data given in the request"""
|
"""Update a tip with the data given in the request"""
|
||||||
if tip_id:
|
if tip_id:
|
||||||
@ -125,7 +136,7 @@ async def api_update_tip(
|
|||||||
status_code=HTTPStatus.FORBIDDEN, detail="Not your tip."
|
status_code=HTTPStatus.FORBIDDEN, detail="Not your tip."
|
||||||
)
|
)
|
||||||
|
|
||||||
tip = await update_tip(tip_id, **g.data)
|
tip = await update_tip(tip_id, **data.dict())
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=HTTPStatus.BAD_REQUEST, detail="No tip ID specified"
|
status_code=HTTPStatus.BAD_REQUEST, detail="No tip ID specified"
|
||||||
@ -135,7 +146,9 @@ async def api_update_tip(
|
|||||||
|
|
||||||
@tipjar_ext.put("/api/v1/tipjars/{tipjar_id}")
|
@tipjar_ext.put("/api/v1/tipjars/{tipjar_id}")
|
||||||
async def api_update_tipjar(
|
async def api_update_tipjar(
|
||||||
wallet: WalletTypeInfo = Depends(get_key_type), tipjar_id: str = Query(None)
|
data: createTipJar,
|
||||||
|
wallet: WalletTypeInfo = Depends(get_key_type),
|
||||||
|
tipjar_id: int = Query(None),
|
||||||
):
|
):
|
||||||
"""Update a tipjar with the data given in the request"""
|
"""Update a tipjar with the data given in the request"""
|
||||||
if tipjar_id:
|
if tipjar_id:
|
||||||
@ -151,7 +164,7 @@ async def api_update_tipjar(
|
|||||||
status_code=HTTPStatus.FORBIDDEN, detail="Not your tipjar."
|
status_code=HTTPStatus.FORBIDDEN, detail="Not your tipjar."
|
||||||
)
|
)
|
||||||
|
|
||||||
tipjar = await update_tipjar(tipjar_id, **data)
|
tipjar = await update_tipjar(str(tipjar_id), **data.dict())
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=HTTPStatus.BAD_REQUEST, detail="No tipjar ID specified"
|
status_code=HTTPStatus.BAD_REQUEST, detail="No tipjar ID specified"
|
||||||
@ -181,7 +194,7 @@ async def api_delete_tip(
|
|||||||
|
|
||||||
@tipjar_ext.delete("/api/v1/tipjars/{tipjar_id}")
|
@tipjar_ext.delete("/api/v1/tipjars/{tipjar_id}")
|
||||||
async def api_delete_tipjar(
|
async def api_delete_tipjar(
|
||||||
wallet: WalletTypeInfo = Depends(get_key_type), tipjar_id: str = Query(None)
|
wallet: WalletTypeInfo = Depends(get_key_type), tipjar_id: int = Query(None)
|
||||||
):
|
):
|
||||||
"""Delete the tipjar with the given tipjar_id"""
|
"""Delete the tipjar with the given tipjar_id"""
|
||||||
tipjar = await get_tipjar(tipjar_id)
|
tipjar = await get_tipjar(tipjar_id)
|
||||||
|
@ -107,7 +107,6 @@ exclude = """(?x)(
|
|||||||
| ^lnbits/extensions/scrub.
|
| ^lnbits/extensions/scrub.
|
||||||
| ^lnbits/extensions/splitpayments.
|
| ^lnbits/extensions/splitpayments.
|
||||||
| ^lnbits/extensions/streamalerts.
|
| ^lnbits/extensions/streamalerts.
|
||||||
| ^lnbits/extensions/tipjar.
|
|
||||||
| ^lnbits/extensions/tpos.
|
| ^lnbits/extensions/tpos.
|
||||||
| ^lnbits/extensions/watchonly.
|
| ^lnbits/extensions/watchonly.
|
||||||
| ^lnbits/extensions/withdraw.
|
| ^lnbits/extensions/withdraw.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user