lnbits-legend/lnbits/extensions/scrub/crud.py

67 lines
1.9 KiB
Python
Raw Normal View History

2022-05-17 20:27:52 +01:00
from typing import List, Optional, Union
from lnbits.db import SQLITE
from . import db
from .models import ScrubLink, CreateScrubLinkData
2022-05-19 11:39:59 +01:00
async def create_scrub_link(wallet_id: str, data: CreateSatsDiceLink) -> satsdiceLink:
satsdice_id = urlsafe_short_hash()
await db.execute(
"""
INSERT INTO scrub.scrub_links (
id,
2022-05-17 20:27:52 +01:00
wallet,
description,
2022-05-19 11:39:59 +01:00
payoraddress,
2022-05-17 20:27:52 +01:00
)
2022-05-19 11:39:59 +01:00
VALUES (?, ?, ?)
2022-05-17 20:27:52 +01:00
""",
(
2022-05-19 11:39:59 +01:00
satsdice_id,
wallet,
description,
payoraddress,
2022-05-17 20:27:52 +01:00
),
)
2022-05-19 11:39:59 +01:00
link = await get_satsdice_pay(satsdice_id)
2022-05-17 20:27:52 +01:00
assert link, "Newly created link couldn't be retrieved"
return link
2022-05-19 11:39:59 +01:00
async def get_scrub_link(link_id: str) -> Optional[satsdiceLink]:
row = await db.fetchone(
"SELECT * FROM scrub.scrub_links WHERE id = ?", (link_id,)
)
return satsdiceLink(**row) if row else None
2022-05-17 20:27:52 +01:00
2022-05-19 11:39:59 +01:00
async def get_scrub_links(wallet_ids: Union[str, List[str]]) -> List[satsdiceLink]:
2022-05-17 20:27:52 +01:00
if isinstance(wallet_ids, str):
wallet_ids = [wallet_ids]
q = ",".join(["?"] * len(wallet_ids))
rows = await db.fetchall(
f"""
2022-05-19 11:39:59 +01:00
SELECT * FROM scrub.scrub_links WHERE wallet IN ({q})
ORDER BY id
2022-05-17 20:27:52 +01:00
""",
(*wallet_ids,),
)
2022-05-19 11:39:59 +01:00
return [satsdiceLink(**row) for row in rows]
2022-05-17 20:27:52 +01:00
2022-05-19 11:39:59 +01:00
async def update_scrub_link(link_id: int, **kwargs) -> Optional[satsdiceLink]:
2022-05-17 20:27:52 +01:00
q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()])
await db.execute(
2022-05-19 11:39:59 +01:00
f"UPDATE scrub.scrub_links SET {q} WHERE id = ?",
(*kwargs.values(), link_id),
2022-05-17 20:27:52 +01:00
)
2022-05-19 11:39:59 +01:00
row = await db.fetchone(
"SELECT * FROM scrub.scrub_links WHERE id = ?", (link_id,)
2022-05-17 20:27:52 +01:00
)
2022-05-19 11:39:59 +01:00
return satsdiceLink(**row) if row else None
2022-05-17 20:27:52 +01:00
2022-05-19 11:39:59 +01:00
async def delete_scrub_link(link_id: int) -> None:
await db.execute("DELETE FROM scrub.scrub_links WHERE id = ?", (link_id,))