2020-11-21 18:04:39 -03:00
|
|
|
from typing import Optional, List
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
from lnbits.core.models import Payment
|
|
|
|
from lnbits.core.crud import (
|
2020-05-01 06:09:51 +01:00
|
|
|
create_account,
|
|
|
|
get_user,
|
2021-03-21 17:57:33 -03:00
|
|
|
get_payments,
|
2020-05-01 06:09:51 +01:00
|
|
|
create_wallet,
|
|
|
|
delete_wallet,
|
|
|
|
)
|
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
from . import db
|
|
|
|
from .models import Users, Wallets
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-08-30 23:19:43 -03:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
### Users
|
2020-05-01 06:09:51 +01:00
|
|
|
|
|
|
|
|
2021-03-24 00:40:32 -03:00
|
|
|
async def create_usermanager_user(
|
2021-05-29 13:42:14 +01:00
|
|
|
user_name: str,
|
|
|
|
wallet_name: str,
|
|
|
|
admin_id: str,
|
|
|
|
email: Optional[str] = None,
|
|
|
|
password: Optional[str] = None,
|
2021-03-24 00:40:32 -03:00
|
|
|
) -> Users:
|
2020-11-21 18:04:39 -03:00
|
|
|
account = await create_account()
|
|
|
|
user = await get_user(account.id)
|
|
|
|
assert user, "Newly created user couldn't be retrieved"
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
wallet = await create_wallet(user_id=user.id, wallet_name=wallet_name)
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
await db.execute(
|
|
|
|
"""
|
2021-06-21 23:22:52 -03:00
|
|
|
INSERT INTO usermanager.users (id, name, admin, email, password)
|
2021-05-29 13:42:14 +01:00
|
|
|
VALUES (?, ?, ?, ?, ?)
|
2020-11-21 18:04:39 -03:00
|
|
|
""",
|
2021-05-29 13:42:14 +01:00
|
|
|
(user.id, user_name, admin_id, email, password),
|
2020-11-21 18:04:39 -03:00
|
|
|
)
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
await db.execute(
|
|
|
|
"""
|
2021-06-21 23:22:52 -03:00
|
|
|
INSERT INTO usermanager.wallets (id, admin, name, "user", adminkey, inkey)
|
2020-11-21 18:04:39 -03:00
|
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
|
|
""",
|
|
|
|
(wallet.id, admin_id, wallet_name, user.id, wallet.adminkey, wallet.inkey),
|
|
|
|
)
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
user_created = await get_usermanager_user(user.id)
|
|
|
|
assert user_created, "Newly created user couldn't be retrieved"
|
|
|
|
return user_created
|
2020-05-01 06:09:51 +01:00
|
|
|
|
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
async def get_usermanager_user(user_id: str) -> Optional[Users]:
|
2021-06-21 23:22:52 -03:00
|
|
|
row = await db.fetchone("SELECT * FROM usermanager.users WHERE id = ?", (user_id,))
|
2020-05-01 06:09:51 +01:00
|
|
|
return Users(**row) if row else None
|
|
|
|
|
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
async def get_usermanager_users(user_id: str) -> List[Users]:
|
2021-06-21 23:22:52 -03:00
|
|
|
rows = await db.fetchall("SELECT * FROM usermanager.users WHERE admin = ?", (user_id,))
|
2020-05-01 06:09:51 +01:00
|
|
|
return [Users(**row) for row in rows]
|
|
|
|
|
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
async def delete_usermanager_user(user_id: str) -> None:
|
|
|
|
wallets = await get_usermanager_wallets(user_id)
|
|
|
|
for wallet in wallets:
|
|
|
|
await delete_wallet(user_id=user_id, wallet_id=wallet.id)
|
2020-08-30 23:19:43 -03:00
|
|
|
|
2021-06-21 23:22:52 -03:00
|
|
|
await db.execute("DELETE FROM usermanager.users WHERE id = ?", (user_id,))
|
|
|
|
await db.execute("""DELETE FROM usermanager.wallets WHERE "user" = ?""", (user_id,))
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-08-30 23:19:43 -03:00
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
### Wallets
|
2020-05-01 06:09:51 +01:00
|
|
|
|
|
|
|
|
2021-03-24 00:40:32 -03:00
|
|
|
async def create_usermanager_wallet(
|
|
|
|
user_id: str, wallet_name: str, admin_id: str
|
|
|
|
) -> Wallets:
|
2020-11-21 18:04:39 -03:00
|
|
|
wallet = await create_wallet(user_id=user_id, wallet_name=wallet_name)
|
|
|
|
await db.execute(
|
|
|
|
"""
|
2021-06-21 23:22:52 -03:00
|
|
|
INSERT INTO usermanager.wallets (id, admin, name, "user", adminkey, inkey)
|
2020-11-21 18:04:39 -03:00
|
|
|
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
|
2020-05-01 06:09:51 +01:00
|
|
|
|
2020-08-30 23:19:43 -03:00
|
|
|
|
2021-04-21 13:41:00 +01:00
|
|
|
async def get_usermanager_wallet(wallet_id: str) -> Optional[Wallets]:
|
2021-06-21 23:22:52 -03:00
|
|
|
row = await db.fetchone("SELECT * FROM usermanager.wallets WHERE id = ?", (wallet_id,))
|
2020-05-01 06:09:51 +01:00
|
|
|
return Wallets(**row) if row else None
|
|
|
|
|
|
|
|
|
2021-04-21 13:41:00 +01:00
|
|
|
async def get_usermanager_wallets(admin_id: str) -> Optional[Wallets]:
|
2021-06-21 23:22:52 -03:00
|
|
|
rows = await db.fetchall("SELECT * FROM usermanager.wallets WHERE admin = ?", (admin_id,))
|
2021-04-21 13:34:50 +01:00
|
|
|
return [Wallets(**row) for row in rows]
|
|
|
|
|
|
|
|
|
2021-04-21 13:41:00 +01:00
|
|
|
async def get_usermanager_users_wallets(user_id: str) -> Optional[Wallets]:
|
2021-06-21 23:22:52 -03:00
|
|
|
rows = await db.fetchall("""SELECT * FROM usermanager.wallets WHERE "user" = ?""", (user_id,))
|
2020-05-01 06:09:51 +01:00
|
|
|
return [Wallets(**row) for row in rows]
|
|
|
|
|
|
|
|
|
2021-04-21 13:41:00 +01:00
|
|
|
async def get_usermanager_wallet_transactions(wallet_id: str) -> Optional[Payment]:
|
2021-03-24 00:40:32 -03:00
|
|
|
return await get_payments(
|
|
|
|
wallet_id=wallet_id, complete=True, pending=False, outgoing=True, incoming=True
|
|
|
|
)
|
2020-05-01 06:09:51 +01:00
|
|
|
|
|
|
|
|
2020-11-21 18:04:39 -03:00
|
|
|
async def delete_usermanager_wallet(wallet_id: str, user_id: str) -> None:
|
|
|
|
await delete_wallet(user_id=user_id, wallet_id=wallet_id)
|
2021-06-21 23:22:52 -03:00
|
|
|
await db.execute("DELETE FROM usermanager.wallets WHERE id = ?", (wallet_id,))
|