Добавлена система управления записями и улучшен процесс бронирования

- Реализован выбор мастера
- Добавлен выбор даты и времени
- Добавлено подтверждение записи
- Реализован раздел «Мои записи»
- Добавлена отмена записи
- Добавлена возможность редактирования записи
- Реализована проверка занятых временных слотов
- Улучшена логика FSM и пользовательский сценарий бронирования
This commit is contained in:
grigorij
2026-06-13 20:28:32 +04:00
parent 8d95ad3931
commit 8b20de1da5
6 changed files with 252 additions and 42 deletions
+87 -20
View File
@@ -1,32 +1,99 @@
from aiogram import Router, F
from aiogram.types import Message
from aiogram.types import (
Message,
CallbackQuery
)
from aiogram.fsm.context import FSMContext
from app.db.memory import bookings
from app.states.booking import BookingState
from app.keyboards.services import get_services_keyboard
from app.services.booking_service import (
get_user_bookings,
cancel_booking,
)
from app.keyboards.my_booking import (
get_booking_actions
)
router = Router()
@router.message(F.text == "📖 Мои записи")
async def my_bookings(message: Message, state: FSMContext):
await state.clear()
user_id = message.from_user.id
@router.message(
F.text == "📖 Мои записи"
)
async def my_bookings(
message: Message
):
bookings = get_user_bookings(
message.from_user.id
)
user_bookings = [
b for b in bookings if b["user_id"] == user_id
]
if not user_bookings:
await message.answer("У вас нет записей")
if not bookings:
await message.answer(
"У вас нет активных записей"
)
return
text = "📖 Ваши записи:\n\n"
for b in user_bookings:
text += (
f"💆 {b['service']}\n"
f"📅 {b['date']}\n"
f"🕒 {b['time']}\n\n"
for booking in bookings:
await message.answer(
f"💆 {booking['service']}\n"
f"👤 {booking['master']}\n"
f"📅 {booking['date']}\n"
f"🕒 {booking['time']}",
reply_markup=get_booking_actions(
booking["id"]
)
)
await message.answer(text)
@router.callback_query(
F.data.startswith(
"cancel_booking_"
)
)
async def cancel_booking_handler(
callback: CallbackQuery
):
booking_id = int(
callback.data.split("_")[-1]
)
cancel_booking(
booking_id
)
await callback.message.edit_text(
"❌ Запись отменена"
)
await callback.answer()
@router.callback_query(
F.data.startswith("edit_booking_")
)
async def edit_booking_handler(
callback: CallbackQuery,
state: FSMContext
):
booking_id = int(
callback.data.split("_")[-1]
)
await state.update_data(
editing_booking_id=booking_id
)
await state.set_state(
BookingState.service
)
await callback.message.edit_text(
"✏️ Выберите новую услугу:",
reply_markup=get_services_keyboard()
)
await callback.answer()