Restoran uchun Telegram bot: mehmon sana, vaqt va stolni tanlaydi, administrator chatda tasdiqlaydi. Ikki marta band qilish bazada bloklangan.
Mehmon stol band qiladigan, administrator esa chatda tasdiqlaydigan yoki rad etadigan bot.
Asosiy yechim — ikki marta band qilishdan himoya. Yozishdan oldin so'rov bilan tekshirish ishonchsiz: tekshiruv bilan yozuv orasiga ikkinchi mehmon ulgurib qoladi. Shuning uchun qoida bazaning o'zida: stol, sana va vaqt bo'yicha qisman unikal indeks, bekor qilinganlari hisobga olinmaydi.
Python 3.11, aiogram 3, SQLite.
Qanday qurilgan
RepozitoriyLoyihaning haqiqiy kodidan parcha — ichida nima borligini ko'rish uchun.
SQL
CREATE TABLE IF NOT EXISTS bookings ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, username TEXT, table_id INTEGER NOT NULL REFERENCES tables(id), book_date TEXT NOT NULL, book_time TEXT NOT NULL, guests INTEGER NOT NULL, status TEXT NOT NULL DEFAULT 'pending');-- Один столик нельзя занять дважды на один и тот же слот.-- Отменённые брони из проверки исключаются.---- Проверять занятость запросом перед вставкой ненадёжно: между-- проверкой и записью успевает вклиниться второй гость. Здесь-- запрет живёт в самой базе, и обойти его нельзя.CREATE UNIQUE INDEX IF NOT EXISTS idx_booking_slot ON bookings (table_id, book_date, book_time) WHERE status <> 'cancelled';CREATE INDEX IF NOT EXISTS idx_booking_user ON bookings (user_id);CREATE INDEX IF NOT EXISTS idx_booking_date ON bookings (book_date);Bog'lanish
Loyiha uchun ariza
Shaklni to'ldiring — tafsilotlar va muddatlarni muhokama qilamiz.
Keyingi loyiha
TechnoMarket — texnika do'koni
