Fix bugs, add README and Makefile
This commit is contained in:
@@ -1,17 +1,26 @@
|
||||
import uuid
|
||||
|
||||
from aiogram import types
|
||||
from aiogram.enums import ParseMode
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder, ReplyKeyboardBuilder
|
||||
from pydantic_filters import PagePagination
|
||||
|
||||
from birthday_pool_bot.dto import User
|
||||
from birthday_pool_bot.repositories.repositories import UsersRepository
|
||||
from birthday_pool_bot.dto import BankEnum, User
|
||||
from birthday_pool_bot.repositories.repositories import (
|
||||
PoolsRepository,
|
||||
SubscriptionsRepository,
|
||||
UsersRepository,
|
||||
)
|
||||
from . import constants
|
||||
from .callback_data import (
|
||||
AddSubscriptionCallbackData,
|
||||
AddSubscriptionConfirmCallbackData,
|
||||
ConfirmAnswerEnum,
|
||||
MenuCallbackData,
|
||||
NewSubscriptionCallbackData,
|
||||
NewSubscriptionConfirmCallbackData,
|
||||
PoolActionEnum,
|
||||
PoolCallbackData,
|
||||
PoolsCallbackData,
|
||||
PoolsBackCallbackData,
|
||||
SubscriptionActionEnum,
|
||||
SubscriptionCallbackData,
|
||||
SubscriptionsCallbackData,
|
||||
@@ -200,12 +209,12 @@ async def show_subscriptions(
|
||||
text = "Мои подписки:" if subscriptions else "Нет подписок"
|
||||
keyboard = InlineKeyboardBuilder()
|
||||
for subscription in subscriptions:
|
||||
keyboard.button(
|
||||
keyboard.row(types.InlineKeyboardButton(
|
||||
text=subscription.name,
|
||||
callback_data=SubscriptionCallbackData(
|
||||
to_user_id=subscription.to_user_id,
|
||||
).pack(),
|
||||
)
|
||||
))
|
||||
navigation_row = []
|
||||
if page > 1:
|
||||
navigation_row.append(types.InlineKeyboardButton(
|
||||
@@ -226,7 +235,7 @@ async def show_subscriptions(
|
||||
keyboard.row(
|
||||
types.InlineKeyboardButton(
|
||||
text="Добавить",
|
||||
callback_data=AddSubscriptionCallbackData().pack(),
|
||||
callback_data=NewSubscriptionCallbackData().pack(),
|
||||
),
|
||||
types.InlineKeyboardButton(
|
||||
text="Назад",
|
||||
@@ -273,7 +282,12 @@ async def show_subscription(
|
||||
)
|
||||
if subscription.pool is not None:
|
||||
if subscription.pool.owner_id == from_user_id:
|
||||
text += "Вы собираете деньги\n\n"
|
||||
bank_title = constants.BANKS_TITLE_MAP[subscription.pool.payment_data.bank]
|
||||
text += (
|
||||
"Вы собираете деньги на:\n"
|
||||
f"_Телефон_: {subscription.pool.payment_data.phone}\n"
|
||||
f"_Банк_: {bank_title}\n\n"
|
||||
)
|
||||
else:
|
||||
text += "Вы участвуете в сборе денег\n\n"
|
||||
keyboard = InlineKeyboardBuilder()
|
||||
@@ -333,7 +347,7 @@ async def delete_subscription(
|
||||
await callback_query.answer(text="Подписка успешно удалена")
|
||||
|
||||
|
||||
async def ask_add_subscription_user(
|
||||
async def ask_new_subscription_user(
|
||||
callback_query: types.CallbackQuery | None = None,
|
||||
message: types.Message | None = None,
|
||||
):
|
||||
@@ -367,7 +381,7 @@ async def ask_add_subscription_user(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_user_birthday(
|
||||
async def ask_new_subscription_user_birthday(
|
||||
message: types.Message,
|
||||
):
|
||||
text = (
|
||||
@@ -388,7 +402,7 @@ async def ask_add_subscription_user_birthday(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_name(
|
||||
async def ask_new_subscription_name(
|
||||
message: types.Message,
|
||||
users_repository: UsersRepository,
|
||||
subscription_user_id: uuid.UUID,
|
||||
@@ -422,7 +436,7 @@ async def ask_add_subscription_name(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_pool_decision(
|
||||
async def ask_new_subscription_pool_decision(
|
||||
message: types.Message,
|
||||
pools_repository: PoolsRepository,
|
||||
users_repository: UsersRepository,
|
||||
@@ -458,9 +472,11 @@ async def ask_add_subscription_pool_decision(
|
||||
)
|
||||
|
||||
|
||||
async def show_add_subscription_pools(
|
||||
async def show_new_subscription_choosing_pools(
|
||||
user: User,
|
||||
users_repository: UsersRepository,
|
||||
pools_repository: PoolsRepository,
|
||||
subscription_user_id: uuid.UUID,
|
||||
message: types.Message | None = None,
|
||||
callback_query: types.CallbackQuery | None = None,
|
||||
):
|
||||
@@ -470,31 +486,34 @@ async def show_add_subscription_pools(
|
||||
callback_data = SubscriptionsCallbackData.unpack(callback_query.data)
|
||||
page = callback_data.page
|
||||
|
||||
async with subscriptions_repository.transaction():
|
||||
total = await subscriptions_repository.get_user_subscriptions_count(user_id=user.id)
|
||||
async with pools_repository.transaction():
|
||||
total = await pools_repository.get_pools_by_birthday_user_id_count(
|
||||
birthday_user_id=subscription_user_id,
|
||||
)
|
||||
pages_count = total // per_page + int(bool(total % per_page))
|
||||
subscriptions = [
|
||||
subscription
|
||||
async for subscription in subscriptions_repository.get_user_subscriptions(
|
||||
user_id=user.id,
|
||||
pools = [
|
||||
pool
|
||||
async for pool in pools_repository.get_pools_by_birthday_user_id(
|
||||
birthday_user_id=subscription_user_id,
|
||||
pagination=PagePagination(page=page, per_page=per_page),
|
||||
with_owner=True,
|
||||
)
|
||||
]
|
||||
|
||||
text = "Сборы:" if subscriptions else "Нет сборов"
|
||||
text = "Сборы:" if pools else "Нет сборов"
|
||||
keyboard = InlineKeyboardBuilder()
|
||||
for subscription in subscriptions:
|
||||
keyboard.button(
|
||||
text=subscription.name,
|
||||
callback_data=SubscriptionCallbackData(
|
||||
to_user_id=subscription.to_user_id,
|
||||
for pool in pools:
|
||||
keyboard.row(types.InlineKeyboardButton(
|
||||
text=pool.owner.name or "Аноним",
|
||||
callback_data=PoolCallbackData(
|
||||
id=pool.id,
|
||||
).pack(),
|
||||
)
|
||||
))
|
||||
navigation_row = []
|
||||
if page > 1:
|
||||
navigation_row.append(types.InlineKeyboardButton(
|
||||
text="<",
|
||||
callback_data=SubscriptionsCallbackData(page=page - 1).pack(),
|
||||
callback_data=PoolsCallbackData(page=page - 1).pack(),
|
||||
))
|
||||
if pages_count > 1:
|
||||
navigation_row.append(types.InlineKeyboardButton(
|
||||
@@ -504,17 +523,13 @@ async def show_add_subscription_pools(
|
||||
if page < pages_count:
|
||||
navigation_row.append(types.InlineKeyboardButton(
|
||||
text=">",
|
||||
callback_data=SubscriptionsCallbackData(page=page + 1).pack(),
|
||||
callback_data=PoolsCallbackData(page=page + 1).pack(),
|
||||
))
|
||||
keyboard.row(*navigation_row)
|
||||
keyboard.row(
|
||||
types.InlineKeyboardButton(
|
||||
text="Добавить",
|
||||
callback_data=AddSubscriptionCallbackData().pack(),
|
||||
),
|
||||
types.InlineKeyboardButton(
|
||||
text="Назад",
|
||||
callback_data=MenuCallbackData().pack(),
|
||||
callback_data=PoolsBackCallbackData().pack(),
|
||||
),
|
||||
)
|
||||
reply_markup = keyboard.as_markup()
|
||||
@@ -535,7 +550,70 @@ async def show_add_subscription_pools(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_pool_description(
|
||||
async def show_new_subscription_choosing_pool(
|
||||
pools_repository: PoolsRepository,
|
||||
pool_id: uuid.UUID,
|
||||
message: types.Message | None = None,
|
||||
callback_query: types.CallbackQuery | None = None,
|
||||
):
|
||||
async with pools_repository.transaction():
|
||||
pool = await pools_repository.get_pool_by_id(
|
||||
pool_id=pool_id,
|
||||
with_owner=True,
|
||||
with_birthday_user=True,
|
||||
)
|
||||
if pool is None:
|
||||
raise FlowInternalError()
|
||||
|
||||
owner_name = (
|
||||
pool.owner.name
|
||||
or pool.owner.phone
|
||||
or pool.owner.telegram_id
|
||||
)
|
||||
birthday_user_name = (
|
||||
pool.birthday_user.name
|
||||
or pool.birthday_user.phone
|
||||
or pool.birthday_user.telegram_id
|
||||
)
|
||||
bank_name = constants.BANKS_TITLE_MAP[pool.payment_data.bank]
|
||||
text = (
|
||||
f"*{owner_name}* собирает деньги для {birthday_user_name}\n\n"
|
||||
"Данные для отправки подарка:\n"
|
||||
f"_Телефон_: {pool.payment_data.phone}\n"
|
||||
f"_Банк_: {bank_name}\n"
|
||||
)
|
||||
keyboard = InlineKeyboardBuilder()
|
||||
keyboard.button(
|
||||
text="Выбрать",
|
||||
callback_data=PoolCallbackData(
|
||||
id=pool_id,
|
||||
action=PoolActionEnum.CHOOSE,
|
||||
).pack(),
|
||||
)
|
||||
keyboard.button(
|
||||
text="Назад",
|
||||
callback_data=PoolsCallbackData().pack()
|
||||
)
|
||||
keyboard.adjust(2)
|
||||
reply_markup = keyboard.as_markup()
|
||||
|
||||
if message is not None:
|
||||
await message.reply(
|
||||
text=text,
|
||||
parse_mode=ParseMode.MARKDOWN,
|
||||
reply_markup=reply_markup,
|
||||
)
|
||||
elif callback_query is not None:
|
||||
await callback_query.message.edit_text(
|
||||
text=text,
|
||||
parse_mode=ParseMode.MARKDOWN,
|
||||
)
|
||||
await callback_query.message.edit_reply_markup(
|
||||
reply_markup=reply_markup,
|
||||
)
|
||||
|
||||
|
||||
async def ask_new_subscription_pool_description(
|
||||
message: types.Message,
|
||||
):
|
||||
keyboard = ReplyKeyboardBuilder()
|
||||
@@ -554,7 +632,7 @@ async def ask_add_subscription_pool_description(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_pool_payment_phone(
|
||||
async def ask_new_subscription_pool_payment_phone(
|
||||
message: types.Message,
|
||||
user: User,
|
||||
):
|
||||
@@ -589,7 +667,7 @@ async def ask_add_subscription_pool_payment_phone(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_pool_payment_bank(
|
||||
async def ask_new_subscription_pool_payment_bank(
|
||||
message: types.Message,
|
||||
):
|
||||
text = "Выберите банк для приёма платежей"
|
||||
@@ -611,7 +689,7 @@ async def ask_add_subscription_pool_payment_bank(
|
||||
)
|
||||
|
||||
|
||||
async def ask_add_subscription_confirmation(
|
||||
async def ask_new_subscription_confirmation(
|
||||
message: types.Message,
|
||||
users_repository: UsersRepository,
|
||||
pools_repository: PoolsRepository,
|
||||
@@ -663,13 +741,13 @@ async def ask_add_subscription_confirmation(
|
||||
keyboard = InlineKeyboardBuilder()
|
||||
keyboard.button(
|
||||
text="Да",
|
||||
callback_data=AddSubscriptionConfirmCallbackData(
|
||||
callback_data=NewSubscriptionConfirmCallbackData(
|
||||
answer=ConfirmAnswerEnum.YES,
|
||||
).pack(),
|
||||
)
|
||||
keyboard.button(
|
||||
text="Нет",
|
||||
callback_data=AddSubscriptionConfirmCallbackData(
|
||||
callback_data=NewSubscriptionConfirmCallbackData(
|
||||
answer=ConfirmAnswerEnum.NO,
|
||||
).pack(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user