import re from aiogram import Router, F from aiogram.fsm.context import FSMContext from aiogram.filters import StateFilter from aiogram.types import Message, CallbackQuery from app.keyboards.services import get_services_keyboard from app.states.booking import BookingState from app.services.booking_service import create_booking from app.keyboards.menu import menu, cancel_menu from app.keyboards.calendar import get_dates_keyboard from app.keyboards.time_slots import get_time_keyboard from app.keyboards.confirm_booking import get_confirm_booking_keyboard router = Router() # отмена записи на любом шаге @router.message(F.text.lower() == "отмена") async def cancel(message: Message, state: FSMContext): await state.clear() await message.answer( "❌ Запись отменена", reply_markup=menu ) # старт записи @router.message(F.text == "📅 Записаться") async def start_booking(message: Message, state: FSMContext): await state.clear() await state.set_state(BookingState.service) await message.answer( "Выберите услугу:", reply_markup=get_services_keyboard() ) @router.callback_query( StateFilter(BookingState.service), F.data.startswith("service_") ) async def choose_service( callback: CallbackQuery, state: FSMContext ): services = { "service_massage": "Массаж", "service_spa": "SPA", "service_cosmetology": "Косметология" } service_name = services[callback.data] await state.update_data( service=service_name ) await state.set_state( BookingState.date ) await callback.message.edit_text( "📅 Выберите дату:", reply_markup=get_dates_keyboard() ) await callback.answer() # выбор даты @router.callback_query( StateFilter(BookingState.date), F.data.startswith("date_") ) async def choose_date( callback: CallbackQuery, state: FSMContext ): selected_date = callback.data.replace( "date_", "" ) await state.update_data( date=selected_date ) await state.set_state( BookingState.time ) await callback.message.edit_text( "🕒 Выберите время:", reply_markup=get_time_keyboard() ) await callback.answer() @router.callback_query( StateFilter(BookingState.time), F.data.startswith("time_") ) async def choose_time( callback: CallbackQuery, state: FSMContext ): selected_time = callback.data.replace( "time_", "" ) await state.update_data( time=selected_time ) data = await state.get_data() await state.set_state( BookingState.confirm ) await callback.message.edit_text( f"📋 Проверьте запись:\n\n" f"💆 Услуга: {data['service']}\n" f"📅 Дата: {data['date']}\n" f"🕒 Время: {selected_time}", reply_markup=get_confirm_booking_keyboard() ) await callback.answer() # подтверждение @router.callback_query( StateFilter(BookingState.confirm), F.data == "confirm_booking" ) async def confirm_booking_callback( callback: CallbackQuery, state: FSMContext ): data = await state.get_data() create_booking( user_id=callback.from_user.id, service=data["service"], date=data["date"], time=data["time"] ) await state.clear() await callback.message.edit_text( "✅ Запись успешно создана" ) await callback.answer() @router.callback_query( StateFilter(BookingState.confirm), F.data == "cancel_booking" ) async def cancel_booking_callback( callback: CallbackQuery, state: FSMContext ): await state.clear() await callback.message.edit_text( "❌ Запись отменена" ) await callback.answer() @router.callback_query( StateFilter(BookingState.confirm), F.data == "edit_booking" ) async def edit_booking_callback( callback: CallbackQuery, state: FSMContext ): old_data = await state.get_data() await state.clear() await state.update_data( service=old_data.get("service") ) await state.set_state( BookingState.service ) from app.keyboards.services import get_services_keyboard await callback.message.edit_text( "Выберите услугу:", reply_markup=get_services_keyboard() )