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

81 lines
2.2 KiB
Python
Raw Normal View History

2022-05-17 20:27:52 +01:00
from typing import List, Optional, Union
2022-06-17 11:41:12 +01:00
from lnbits.helpers import urlsafe_short_hash
2022-05-17 20:27:52 +01:00
from . import db
2022-06-17 11:41:12 +01:00
from .models import CreateScrubLink, ScrubLink
2022-05-17 20:27:52 +01:00
2022-06-22 13:30:06 +01:00
async def create_scrub_link(data: CreateScrubLink) -> ScrubLink:
2022-06-17 11:41:12 +01:00
scrub_id = urlsafe_short_hash()
2022-05-19 11:39:59 +01:00
await db.execute(
"""
INSERT INTO scrub.scrub_links (
id,
2022-05-17 20:27:52 +01:00
wallet,
description,
2022-06-17 11:41:12 +01:00
payoraddress
2022-05-17 20:27:52 +01:00
)
2022-06-17 11:41:12 +01:00
VALUES (?, ?, ?, ?)
2022-05-17 20:27:52 +01:00
""",
(
2022-06-17 11:41:12 +01:00
scrub_id,
data.wallet,
data.description,
data.payoraddress,
2022-05-17 20:27:52 +01:00
),
)
2022-06-17 11:41:12 +01:00
link = await get_scrub_link(scrub_id)
2022-05-17 20:27:52 +01:00
assert link, "Newly created link couldn't be retrieved"
return link
2022-06-07 11:04:34 +01:00
async def get_scrub_link(link_id: str) -> Optional[ScrubLink]:
2022-07-05 16:21:49 +01:00
row = await db.fetchone("SELECT * FROM scrub.scrub_links WHERE id = ?", (link_id,))
2022-06-07 11:04:34 +01:00
return ScrubLink(**row) if row else None
2022-05-17 20:27:52 +01:00
2022-06-07 11:04:34 +01:00
async def get_scrub_links(wallet_ids: Union[str, List[str]]) -> List[ScrubLink]:
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-06-07 11:04:34 +01:00
return [ScrubLink(**row) for row in rows]
2022-05-17 20:27:52 +01:00
2022-06-07 11:04:34 +01:00
async def update_scrub_link(link_id: int, **kwargs) -> Optional[ScrubLink]:
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-07-05 16:21:49 +01:00
row = await db.fetchone("SELECT * FROM scrub.scrub_links WHERE id = ?", (link_id,))
2022-06-07 11:04:34 +01:00
return ScrubLink(**row) if row else None
2022-05-17 20:27:52 +01:00
2022-07-05 16:21:49 +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,))
2022-06-21 10:31:18 +01:00
2022-07-05 16:21:49 +01:00
2022-06-21 10:31:18 +01:00
async def get_scrub_by_wallet(wallet_id) -> Optional[ScrubLink]:
row = await db.fetchone(
"SELECT * from scrub.scrub_links WHERE wallet = ?",
(wallet_id,),
)
return ScrubLink(**row) if row else None
2022-07-05 16:21:49 +01:00
2022-06-21 10:31:18 +01:00
async def unique_scrubed_wallet(wallet_id):
2022-07-05 16:21:49 +01:00
(row,) = await db.fetchone(
2022-06-21 10:31:18 +01:00
"SELECT COUNT(wallet) FROM scrub.scrub_links WHERE wallet = ?",
(wallet_id,),
)
return row