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

120 lines
3.7 KiB
Python
Raw Normal View History

2021-10-18 10:58:09 +01:00
from typing import List, Optional
2021-10-11 11:52:21 +01:00
2021-10-25 12:42:24 +01:00
from lnbits.core.crud import (
create_account,
create_wallet,
delete_wallet,
get_payments,
get_user,
)
2021-10-11 11:52:21 +01:00
from lnbits.core.models import Payment
from . import db
2022-12-20 13:14:49 +01:00
from .models import CreateUserData, User, Wallet
2021-10-11 11:52:21 +01:00
2022-12-20 13:14:49 +01:00
async def create_usermanager_user(data: CreateUserData) -> User:
2021-10-11 11:52:21 +01:00
account = await create_account()
user = await get_user(account.id)
assert user, "Newly created user couldn't be retrieved"
2021-10-12 17:04:49 +01:00
wallet = await create_wallet(user_id=user.id, wallet_name=data.wallet_name)
2021-10-11 11:52:21 +01:00
await db.execute(
"""
INSERT INTO usermanager.users (id, name, admin, email, password)
VALUES (?, ?, ?, ?, ?)
""",
2021-10-12 17:04:49 +01:00
(user.id, data.user_name, data.admin_id, data.email, data.password),
2021-10-11 11:52:21 +01:00
)
await db.execute(
"""
INSERT INTO usermanager.wallets (id, admin, name, "user", adminkey, inkey)
VALUES (?, ?, ?, ?, ?, ?)
""",
2021-10-17 18:33:29 +01:00
(
wallet.id,
data.admin_id,
data.wallet_name,
user.id,
wallet.adminkey,
wallet.inkey,
),
2021-10-11 11:52:21 +01:00
)
user_created = await get_usermanager_user(user.id)
assert user_created, "Newly created user couldn't be retrieved"
return user_created
2022-12-20 13:14:49 +01:00
async def get_usermanager_user(user_id: str) -> Optional[User]:
2021-10-11 11:52:21 +01:00
row = await db.fetchone("SELECT * FROM usermanager.users WHERE id = ?", (user_id,))
2022-12-20 13:14:49 +01:00
return User(**row) if row else None
2021-10-11 11:52:21 +01:00
2022-12-20 13:44:14 +01:00
async def get_usermanager_users(user_id: str) -> List[User]:
2021-10-11 11:52:21 +01:00
rows = await db.fetchall(
"SELECT * FROM usermanager.users WHERE admin = ?", (user_id,)
)
2021-10-17 18:33:29 +01:00
2022-12-20 13:14:49 +01:00
return [User(**row) for row in rows]
2021-10-11 11:52:21 +01:00
async def delete_usermanager_user(user_id: str, delete_core: bool = True) -> None:
if delete_core:
wallets = await get_usermanager_wallets(user_id)
for wallet in wallets:
await delete_wallet(user_id=user_id, wallet_id=wallet.id)
2021-10-11 11:52:21 +01:00
await db.execute("DELETE FROM usermanager.users WHERE id = ?", (user_id,))
await db.execute("""DELETE FROM usermanager.wallets WHERE "user" = ?""", (user_id,))
async def create_usermanager_wallet(
user_id: str, wallet_name: str, admin_id: str
2022-12-20 13:14:49 +01:00
) -> Wallet:
2021-10-11 11:52:21 +01:00
wallet = await create_wallet(user_id=user_id, wallet_name=wallet_name)
await db.execute(
"""
INSERT INTO usermanager.wallets (id, admin, name, "user", adminkey, inkey)
VALUES (?, ?, ?, ?, ?, ?)
""",
(wallet.id, admin_id, wallet_name, user_id, wallet.adminkey, wallet.inkey),
)
wallet_created = await get_usermanager_wallet(wallet.id)
assert wallet_created, "Newly created wallet couldn't be retrieved"
return wallet_created
2022-12-20 13:14:49 +01:00
async def get_usermanager_wallet(wallet_id: str) -> Optional[Wallet]:
2021-10-11 11:52:21 +01:00
row = await db.fetchone(
"SELECT * FROM usermanager.wallets WHERE id = ?", (wallet_id,)
)
2022-12-20 13:14:49 +01:00
return Wallet(**row) if row else None
2021-10-11 11:52:21 +01:00
2022-12-20 13:44:14 +01:00
async def get_usermanager_wallets(admin_id: str) -> List[Wallet]:
2021-10-11 11:52:21 +01:00
rows = await db.fetchall(
"SELECT * FROM usermanager.wallets WHERE admin = ?", (admin_id,)
)
2022-12-20 13:14:49 +01:00
return [Wallet(**row) for row in rows]
2021-10-11 11:52:21 +01:00
2022-12-20 13:44:14 +01:00
async def get_usermanager_users_wallets(user_id: str) -> List[Wallet]:
2021-10-11 11:52:21 +01:00
rows = await db.fetchall(
"""SELECT * FROM usermanager.wallets WHERE "user" = ?""", (user_id,)
)
2022-12-20 13:14:49 +01:00
return [Wallet(**row) for row in rows]
2021-10-11 11:52:21 +01:00
2022-12-20 13:44:14 +01:00
async def get_usermanager_wallet_transactions(wallet_id: str) -> List[Payment]:
2021-10-11 11:52:21 +01:00
return await get_payments(
wallet_id=wallet_id, complete=True, pending=False, outgoing=True, incoming=True
)
async def delete_usermanager_wallet(wallet_id: str, user_id: str) -> None:
await delete_wallet(user_id=user_id, wallet_id=wallet_id)
await db.execute("DELETE FROM usermanager.wallets WHERE id = ?", (wallet_id,))