- Migration 010: booking_guests table (roster per booking with passport data) - Backend: /bookings/:id/guests CRUD — auto-links/creates guest profiles by passport - Backend: /hotel-settings GET/PATCH for key-value settings (require_guest_docs) - BookingDetailPanel: Гости tab with multi-guest list, inline add/edit form, guest autocomplete (debounced search in guests table), child/main badges, passport fields for adults, scan stub, require-docs warning - SettingsPage: toggle "Обязательное заполнение документов гостей" - Pass slug prop through CalendarPage → BookingCalendar → BookingDetailPanel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
1.2 KiB
SQL
29 lines
1.2 KiB
SQL
-- Migration 010 — booking_guests: per-booking guest roster with documents
|
|
|
|
CREATE TABLE IF NOT EXISTS booking_guests (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
booking_id UUID NOT NULL REFERENCES bookings(id) ON DELETE CASCADE,
|
|
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
|
|
guest_id UUID REFERENCES guests(id) ON DELETE SET NULL,
|
|
|
|
first_name VARCHAR(100) NOT NULL,
|
|
last_name VARCHAR(100) NOT NULL,
|
|
middle_name VARCHAR(100),
|
|
|
|
birth_date DATE,
|
|
is_child BOOLEAN NOT NULL DEFAULT false,
|
|
is_main BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
passport_series VARCHAR(20),
|
|
passport_number VARCHAR(20),
|
|
passport_issued_by TEXT,
|
|
passport_issue_date DATE,
|
|
nationality VARCHAR(100),
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_booking_guests_booking ON booking_guests(booking_id);
|
|
CREATE INDEX IF NOT EXISTS idx_booking_guests_guest ON booking_guests(guest_id);
|