fix: migration 036 — delete old channels before altering constraint + remove TravelLine refs + hide hotel_admin from roles tab
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
-- Replace old channel constraint with Russian market channels
|
||||
-- Remove old non-RU channels FIRST (before changing constraint)
|
||||
DELETE FROM channels WHERE name IN ('airbnb', 'expedia', 'vrbo');
|
||||
|
||||
-- Now safely replace constraint
|
||||
ALTER TABLE channels DROP CONSTRAINT IF EXISTS channels_name_check;
|
||||
ALTER TABLE channels ADD CONSTRAINT channels_name_check
|
||||
CHECK (name IN (
|
||||
@@ -12,9 +15,6 @@ ALTER TABLE channels ADD CONSTRAINT channels_name_check
|
||||
'onetwotrip'
|
||||
));
|
||||
|
||||
-- Remove old non-RU channels from all hotels
|
||||
DELETE FROM channels WHERE name IN ('airbnb', 'expedia', 'vrbo');
|
||||
|
||||
-- Add new Russian channels for all existing hotels (skip if already exists)
|
||||
INSERT INTO channels (hotel_id, name)
|
||||
SELECT h.id, c.name
|
||||
|
||||
@@ -8,9 +8,9 @@ import { Badge } from '../components/ui/Badge'
|
||||
|
||||
const CHANNEL_META: Record<string, { icon: string; label: string; description: string; integration: string }> = {
|
||||
booking_com: { icon: '🔵', label: 'Booking.com', description: 'Крупнейшая международная OTA', integration: 'XML API' },
|
||||
yandex_travel: { icon: '🔴', label: 'Яндекс Путешествия', description: 'Ведущая платформа бронирования в РФ', integration: 'TravelLine' },
|
||||
yandex_travel: { icon: '🔴', label: 'Яндекс Путешествия', description: 'Ведущая платформа бронирования в РФ', integration: 'XML API' },
|
||||
ostrovok: { icon: '🟣', label: 'Островок', description: 'Один из крупнейших российских OTA', integration: 'REST API' },
|
||||
sutochno: { icon: '🟠', label: 'Суточно.ру', description: 'Посуточная аренда и гостиницы', integration: 'iCal / TravelLine' },
|
||||
sutochno: { icon: '🟠', label: 'Суточно.ру', description: 'Посуточная аренда и гостиницы', integration: 'iCal / API' },
|
||||
avito: { icon: '🟢', label: 'Авито', description: 'Крупнейшая площадка объявлений в РФ', integration: 'XML фид / REST' },
|
||||
bronevik: { icon: '🔷', label: 'Bronevik.com', description: 'Корпоративное бронирование командировок', integration: 'SOAP/XML API' },
|
||||
hotels101: { icon: '🟡', label: '101hotels.ru', description: 'Российский агрегатор отелей', integration: 'OTA XML' },
|
||||
|
||||
@@ -445,8 +445,10 @@ function UserModal({
|
||||
// ── Roles & Permissions Tab ────────────────────────────────────────────────────
|
||||
|
||||
function RolesTab() {
|
||||
const [roles, setRoles] = useState<RolePermissions[]>(INITIAL_ROLE_PERMISSIONS)
|
||||
const [selectedRoleId, setSelectedRoleId] = useState<string>(INITIAL_ROLE_PERMISSIONS[0].id)
|
||||
// hotel_admin always has all permissions — excluded from the editable list
|
||||
const editableRoles = INITIAL_ROLE_PERMISSIONS.filter(r => r.id !== 'rp_hotel_admin')
|
||||
const [roles, setRoles] = useState<RolePermissions[]>(editableRoles)
|
||||
const [selectedRoleId, setSelectedRoleId] = useState<string>(editableRoles[0].id)
|
||||
const [newRoleName, setNewRoleName] = useState('')
|
||||
const [addingRole, setAddingRole] = useState(false)
|
||||
const [deleteId, setDeleteId] = useState<string | null>(null)
|
||||
|
||||
Reference in New Issue
Block a user