36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
"""Сервис магазина."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from common.models import Donat, Title
|
|
from common.repositories import shop_repo
|
|
|
|
|
|
async def list_titles() -> list[Title]:
|
|
rows = await shop_repo.get_titles_list()
|
|
return [
|
|
Title(id=int(row["i"]), title=row["n"] or "", price=int(row["p"] or 0))
|
|
for row in rows
|
|
]
|
|
|
|
|
|
async def list_donats() -> list[Donat]:
|
|
rows = await shop_repo.get_donats_list()
|
|
return [
|
|
Donat(id=int(row["i"]), title=row["n"] or "", price=int(row["p"] or 0))
|
|
for row in rows
|
|
]
|
|
|
|
|
|
async def buy_title(id_user: int, id_title: int) -> bool:
|
|
"""Купить звание. Возвращает True при успехе."""
|
|
return await shop_repo.buy_title(id_user, id_title) == 1
|
|
|
|
|
|
async def buy_donat(id_user: int, id_donat: int) -> str | None:
|
|
"""Купить донат. Возвращает промокод или None при неуспехе."""
|
|
result = await shop_repo.buy_donat(id_user, id_donat)
|
|
if result == "-1":
|
|
return None
|
|
return result
|