diff --git a/migrations/0023_restore_richtext_content.sql b/migrations/0023_restore_richtext_content.sql new file mode 100644 index 0000000..981a6ce --- /dev/null +++ b/migrations/0023_restore_richtext_content.sql @@ -0,0 +1,114 @@ +-- Restore richText content wiped by migrations 0020/0021/0022 (ALTER TYPE ... USING NULL). +-- Values extracted from pre-webp-migration-20260610_135729.sql.gz and wrapped as Lexical JSON. +-- Idempotent: only fills columns that are still NULL. + +-- ── dinosaur_page ─────────────────────────────────────────────── +UPDATE "dinosaur_page" SET "hero_description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Пориньте у світ динозаврів, які рухаються, гарчать і вражають своїми розмірами. На вас чекають реалістичні експонати, захопливі відкриття та незабутні емоції для всієї родини"}]}]}}'::jsonb WHERE "id" = '1' AND "hero_description" IS NULL; +UPDATE "dinosaur_page" SET "activities_description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Хочете дізнатись ще більше про динозаврів? Замовте екскурсію з гідом, пориньте у світ палеонтологічних розкопок або підкоріть справжнього динозавра!"}]}]}}'::jsonb WHERE "id" = '1' AND "activities_description" IS NULL; + +-- ── dyvolis_page ──────────────────────────────────────────────── +UPDATE "dyvolis_page" SET "hero_description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Топіарні фігури у вигляді казкових єдинорогів, драконів, магічних створінь і милих лісових звірят. Тут можна гратися, робити яскраві фото та відкривати нові пригоди, розвиваючи уяву та допитливість "}]}]}}'::jsonb WHERE "id" = '1' AND "hero_description" IS NULL; + +-- ── tickets_page ──────────────────────────────────────────────── +UPDATE "tickets_page" SET "benefits_footnote" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"*Знижки та пільги поширюються виключно на індивідуальне відвідування 3 основних локацій (Динопарк, Зона топіарних фігур, Дзеркальний лабіринт) та не сумуються з тарифами категорії «КОМБО»."}]}]}}'::jsonb WHERE "id" = '1' AND "benefits_footnote" IS NULL; + +-- ── home_page ─────────────────────────────────────────────────── +UPDATE "home_page" SET "hero_subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"щороку фотографуйтесь біля улюбленого динозавра"}]}]}}'::jsonb WHERE "id" = '1' AND "hero_subtitle" IS NULL; +UPDATE "home_page" SET "birthday_intro_text" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Мі підготували акційні пропозиції"}]}]}}'::jsonb WHERE "id" = '1' AND "birthday_intro_text" IS NULL; +UPDATE "home_page" SET "news_subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дізнавайтеся серед перших про нові події у парку, щоб не пропустити цікаві квести, фестивалі та пригоди тест"}]}]}}'::jsonb WHERE "id" = '1' AND "news_subtitle" IS NULL; + +-- ── group_visits_page ─────────────────────────────────────────── +UPDATE "group_visits_page" SET "hero_description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Плануєте екскурсію? Шуміленд - це динозаври, казкові локації, активний відпочинок та незабутні враження для дітей будь-якого віку"}]}]}}'::jsonb WHERE "id" = '1' AND "hero_description" IS NULL; +UPDATE "group_visits_page" SET "feature_text" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"На дітей чекає захоплива подорож у Динопарк, Диво Ліс та Дзеркальний лабіринт. Море позитивних емоцій на свіжому повітрі!"}]}]}}'::jsonb WHERE "id" = '1' AND "feature_text" IS NULL; +UPDATE "group_visits_page" SET "bottom_text" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Хочете перетворити візит на справжню маленьку експедицію з розповідями або замовити екскурсію з розповідями про динозаврів? Ми залюбки це організуємо! Телефонуйте нам — і ми все підготуємо та розрахуємо індивідуально для вашої групи. тест"}]}]}}'::jsonb WHERE "id" = '1' AND "bottom_text" IS NULL; +UPDATE "group_visits_page" SET "price_description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"У вартість комбо-квитка зі знижкою - 10% входить відвідування Динопарку, Диво Лісу та Дзеркального лабіринту."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Час перебування на локаціях Динопарк та Диво Ліс - необмежений. тест"}]}]}}'::jsonb WHERE "id" = '1' AND "price_description" IS NULL; + +-- ── legal_pages ───────────────────────────────────────────────── +UPDATE "legal_pages" SET "privacy_content" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дата набрання чинності: 01 червня 2026 р."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"1. ЗАГАЛЬНІ ПОЛОЖЕННЯ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Цей документ є Політикою конфіденційності ТОВ «ТЕХНОСМАРТ УКРАЇНА» (далі — «Компанія», «ми»), що регулює порядок збору, обробки та захисту персональних даних користувачів вебсайту https://shumiland.com.ua (далі — «Сайт») відповідно до Закону України «Про захист персональних даних» від 01.06.2010 № 2297-VI, Закону України «Про інформацію» та інших актів законодавства України у сфері захисту персональних даних."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2. ХТО МИ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Оператор персональних даних:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ТОВ «ТЕХНОСМАРТ УКРАЇНА», ЄДРПОУ 40166430"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Юридична адреса: Житомирська обл., м. Житомир, вул. Мала Бердичівська, буд. 16а, каб. 3"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Email: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Телефон: +380 67 144 3635"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3. ЯКІ ДАНІ МИ ЗБИРАЄМО"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"При користуванні Сайтом ми можемо збирати:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Контактні дані (ім''я, email, номер телефону) — при заповненні форм замовлення або зворотнього зв''язку;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Платіжні дані — обробляються виключно платіжним провайдером (Monobank), ми не зберігаємо реквізити карток;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Технічні дані (IP-адреса, cookie, дані браузера) — для аналітики та покращення роботи Сайту;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Дані щодо замовлень (склад замовлення, дата, сума)."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4. МЕТА ОБРОБКИ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми обробляємо персональні дані з метою:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Виконання договірних зобов''язань (продаж квитків, обробка замовлень);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Надсилання підтверджень замовлень та квитків на email;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Зв''язку з клієнтом у разі потреби;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Покращення якості послуг та роботи Сайту;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Дотримання вимог законодавства."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5. ЗБЕРІГАННЯ ТА ЗАХИСТ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Персональні дані зберігаються на захищених серверах. Ми вживаємо технічних і організаційних заходів для захисту даних від несанкціонованого доступу. Дані зберігаються не довше, ніж це необхідно для зазначених цілей."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6. ПЕРЕДАЧА ДАНИХ ТРЕТІМ ОСОБАМ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми не продаємо та не передаємо персональні дані третім особам, крім:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Платіжних сервісів (Monobank) для обробки платежів;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Сервісів аналітики (Google Analytics) — знеособлені дані;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Уповноважених державних органів на їхній законний запит."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7. ПРАВА СУБ''ЄКТІВ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Відповідно до ст. 8 Закону України «Про захист персональних даних» ви маєте право:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Знати про місцезнаходження бази персональних даних, її призначення та найменування власника;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Отримати доступ до своїх персональних даних (ст. 16 Закону);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Отримувати відомості про умови надання доступу до даних;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— На захист своїх персональних даних від незаконної обробки та випадкової втрати;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Вимагати виправлення недостовірних даних або їх знищення;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Подати скаргу до Уповноваженого Верховної Ради України з прав людини."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Для реалізації прав звертайтеся: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"8. COOKIE"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сайт використовує cookie для аналітики та покращення роботи. Ви можете відключити cookie в налаштуваннях браузера."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"9. ЗМІНИ ДО ПОЛІТИКИ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми можемо оновлювати цю Політику. Актуальна версія завжди доступна на Сайті."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Контакти: smart.office@proton.me | +380 67 144 3635"}]}]}}'::jsonb WHERE "id" = '1' AND "privacy_content" IS NULL; +UPDATE "legal_pages" SET "terms_content" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дата набрання чинності: 01 червня 2026 р."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"1. ЗАГАЛЬНІ ПОЛОЖЕННЯ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ці Умови використання (далі — «Умови») регулюють відносини між ТОВ «ТЕХНОСМАРТ УКРАЇНА», ЄДРПОУ 40166430 (далі — «Парк», «ми»), та користувачами вебсайту https://shumiland.com.ua (далі — «Сайт», «Користувач»)."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Використання Сайту означає повне прийняття цих Умов."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2. ПРЕДМЕТ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сайт надає інформацію про парк розваг «Шуміленд», а також забезпечує можливість онлайн-придбання квитків на атракції та послуги парку."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3. ПРИДБАННЯ КВИТКІВ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.1. Квитки реалізуються через онлайн-форму на Сайті."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.2. Оплата здійснюється через платіжний сервіс Monobank."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.3. Підтвердження замовлення та квиток надсилаються на вказаний email протягом 15 хвилин після успішної оплати."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.4. Квиток дійсний на дату та час, зазначені у замовленні."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4. ПРАВИЛА ВІДВІДУВАННЯ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.1. Відвідувачі зобов''язані дотримуватись правил поведінки на території парку."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.2. Адміністрація парку має право відмовити у вході або видалити відвідувача, що порушує правила."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.3. Діти до 10 років допускаються лише у супроводі дорослих."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.4. Забороняється вносити на територію парку алкогольні напої, наркотичні речовини, зброю."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5. ПОВЕРНЕННЯ ТА ОБМІН КВИТКІВ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5.1. Повернення коштів за придбані квитки можливе не пізніше ніж за 24 години до початку відвідування."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5.2. Для повернення звертайтеся на email: smart.office@proton.me із зазначенням номера замовлення."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5.3. Кошти повертаються на картку, з якої здійснювалася оплата, протягом 5-7 банківських днів."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6. ВІДПОВІДАЛЬНІСТЬ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6.1. Парк не несе відповідальності за особисті речі відвідувачів."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6.2. Відвідування атракціонів здійснюється на власний ризик з урахуванням вікових та медичних обмежень."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6.3. Адміністрація парку не несе відповідальності за шкоду, спричинену порушенням правил відвідування."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7. ІНТЕЛЕКТУАЛЬНА ВЛАСНІСТЬ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Усі матеріали Сайту (тексти, зображення, логотипи) є власністю ТОВ «ТЕХНОСМАРТ УКРАЇНА». Копіювання без письмового дозволу заборонено."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"8. ЗМІНИ УМОВ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми залишаємо за собою право змінювати ці Умови. Нова редакція набирає чинності з моменту публікації на Сайті."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Контакти: smart.office@proton.me | +380 67 144 3635"}]}]}}'::jsonb WHERE "id" = '1' AND "terms_content" IS NULL; +UPDATE "legal_pages" SET "offer_content" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дата набрання чинності: 01 червня 2026 р."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ПУБЛІЧНА ОФЕРТА"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"про надання послуг парку розваг «Шуміленд»"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ТОВ «ТЕХНОСМАРТ УКРАЇНА», ЄДРПОУ 40166430, юридична адреса: Житомирська обл., м. Житомир, вул. Мала Бердичівська, буд. 16а, каб. 3 (далі — «Виконавець»), відповідно до ст. 633, 641 Цивільного кодексу України, публікує цю Публічну оферту (далі — «Оферта»), яка є офіційною пропозицією укласти Договір про надання послуг на нижчевикладених умовах."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"1. ТЕРМІНИ ТА ВИЗНАЧЕННЯ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Оферта — ця публічна пропозиція Виконавця укласти Договір."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Акцепт — повна безумовна згода Замовника з умовами Оферти, що виражається в оплаті послуг."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Замовник — фізична або юридична особа, яка здійснила Акцепт."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Послуги — право відвідування парку розваг «Шуміленд» та користування атракціонами відповідно до придбаного квитка."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2. ПРЕДМЕТ ДОГОВОРУ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2.1. Виконавець зобов''язується надати Замовнику послуги з доступу до парку розваг «Шуміленд» (далі — «Парк») відповідно до придбаного квитка."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2.2. Замовник зобов''язується оплатити послуги в розмірі, визначеному на Сайті на момент замовлення."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3. ПОРЯДОК УКЛАДЕННЯ ДОГОВОРУ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.1. Договір вважається укладеним з моменту повної оплати вартості квитка."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.2. Акцептом є факт оплати замовлення через платіжну систему."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.3. Підтвердженням укладення Договору є електронний квиток, надісланий на email Замовника."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4. ВАРТІСТЬ ТА ПОРЯДОК ОПЛАТИ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.1. Вартість послуг визначається відповідно до діючого прайс-листа, опублікованого на Сайті."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.2. Оплата здійснюється виключно в безготівковій формі через платіжний сервіс Monobank."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.3. Ціни зазначені в гривнях (UAH), включаючи всі податки та збори."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5. ПРАВА ТА ОБОВ''ЯЗКИ СТОРІН"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5.1. Виконавець зобов''язаний:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— забезпечити доступ до Парку згідно з придбаним квитком;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— підтримувати атракціони та зони в безпечному стані;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— надати необхідну інформацію про умови відвідування."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5.2. Замовник зобов''язаний:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— пред''явити квиток при вході;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— дотримуватись правил відвідування Парку;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— нести відповідальність за поведінку неповнолітніх осіб, яких він супроводжує."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6. ВІДПОВІДАЛЬНІСТЬ СТОРІН"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6.1. За невиконання або неналежне виконання умов Договору Сторони несуть відповідальність відповідно до чинного законодавства України."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6.2. Виконавець не несе відповідальності за неможливість надання послуг внаслідок обставин непереборної сили."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7. ПОРЯДОК ПОВЕРНЕННЯ КОШТІВ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.1. Замовник має право відмовитися від послуг та отримати повне відшкодування коштів не пізніше ніж за 24 години до дати відвідування."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.2. Заявка на повернення подається на email: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.3. Кошти повертаються протягом 5-7 банківських днів на рахунок, з якого здійснювалася оплата."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"8. СТРОК ДІЇ ОФЕРТИ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Оферта діє безстроково до її відкликання Виконавцем."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"9. РЕКВІЗИТИ ВИКОНАВЦЯ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ТОВ «ТЕХНОСМАРТ УКРАЇНА»"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ЄДРПОУ: 40166430"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Адреса: Житомирська обл., м. Житомир, вул. Мала Бердичівська, буд. 16а, каб. 3"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Email: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Телефон: +380 67 144 3635"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сайт: https://shumiland.com.ua"}]}]}}'::jsonb WHERE "id" = '1' AND "offer_content" IS NULL; +UPDATE "legal_pages" SET "data_processing_content" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дата набрання чинності: 01 червня 2026 р."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ПОРЯДОК ОБРОБКИ ПЕРСОНАЛЬНИХ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ТОВ «ТЕХНОСМАРТ УКРАЇНА», ЄДРПОУ 40166430 (далі — «Власник бази»), відповідно до Закону України «Про захист персональних даних» від 01.06.2010 № 2297-VI (далі — Закон), інформує про умови обробки персональних даних."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"1. ОПЕРАТОР ПЕРСОНАЛЬНИХ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Найменування: ТОВ «ТЕХНОСМАРТ УКРАЇНА»"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ЄДРПОУ: 40166430"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Адреса: Житомирська обл., м. Житомир, вул. Мала Бердичівська, буд. 16а, каб. 3"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Email: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Телефон: +380 67 144 3635"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"2. СКЛАД ПЕРСОНАЛЬНИХ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Оператор обробляє такі категорії персональних даних:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Прізвище, ім''я (за наявності у замовленні);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Адреса електронної пошти;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Номер телефону;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Інформація про замовлення та відвідування;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Технічні дані (IP-адреса, дані cookie)."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3. МЕТА ТА ПРАВОВА ПІДСТАВА ОБРОБКИ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Відповідно до ст. 6 Закону підставами для обробки персональних даних є:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.1. Надання згоди суб''єкта персональних даних (ст. 6 ч. 1 п. 1 Закону) — при заповненні форм на Сайті."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.2. Укладення та виконання правочину (ст. 6 ч. 1 п. 2 Закону) — обробка даних для виконання замовлення, продажу квитків та підтвердження оплати."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.3. Захист законних інтересів власника бази персональних даних — покращення якості послуг, аналітика, безпека Сайту (ст. 6 ч. 1 п. 6 Закону)."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"3.4. Виконання обов''язку власника бази, передбаченого законом (ст. 6 ч. 1 п. 3 Закону) — дотримання вимог чинного законодавства України."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4. ПОРЯДОК ОБРОБКИ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.1. Збір даних здійснюється при заповненні форм на Сайті або при покупці квитків."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.2. Дані зберігаються на захищених серверах на території ЄС або в Україні."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.3. Строк зберігання даних — 3 роки з моменту останньої взаємодії або до реалізації права на видалення."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"4.4. Персональні дані не передаються третім особам, крім платіжних провайдерів та сервісів аналітики в знеособленому вигляді."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"5. ПРАВА СУБ''ЄКТІВ ПЕРСОНАЛЬНИХ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Відповідно до ст. 8 Закону України «Про захист персональних даних» ви маєте право:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Знати про місцезнаходження бази персональних даних (ст. 8 ч. 1 п. 1);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Отримати доступ до своїх персональних даних (ст. 16 Закону);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Вимагати виправлення недостовірних або застарілих даних (ст. 8 ч. 1 п. 4);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Вимагати знищення персональних даних (ст. 8 ч. 1 п. 4);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Відкликати згоду на обробку персональних даних;"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— На захист своїх персональних даних від незаконної обробки (ст. 8 ч. 1 п. 7);"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"— Подати скаргу до Уповноваженого Верховної Ради України з прав людини."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"6. РЕАЛІЗАЦІЯ ПРАВ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Для реалізації будь-якого з перелічених прав направте запит на email: smart.office@proton.me"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Строк розгляду запиту — 30 календарних днів з моменту отримання."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7. ЗАХИСТ ДАНИХ"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Відповідно до ст. 24 Закону власник бази персональних даних зобов''язаний:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.1. Вживати заходів щодо захисту персональних даних від незаконної обробки та несанкціонованого доступу."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.2. Призначити відповідальну особу за захист персональних даних."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"7.3. У разі виявлення порушень невідкладно повідомити суб''єктів персональних даних."}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"8. СКАРГИ ТА НАГЛЯД"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Нагляд за дотриманням законодавства про захист персональних даних в Україні здійснює:"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Уповноважений Верховної Ради України з прав людини"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"вул. Інститутська, 21/8, м. Київ, 01008"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"тел.: +38 (044) 299-74-06"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сайт: https://www.ombudsman.gov.ua"}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Контакти Оператора: smart.office@proton.me | +380 67 144 3635"}]}]}}'::jsonb WHERE "id" = '1' AND "data_processing_content" IS NULL; + +-- ── locations ─────────────────────────────────────────────────── +UPDATE "locations" SET "short_desc" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Найбільші динозаври України — рухаються і гарчать як справжні. Понад 26 унікальних експонатів."}]}]}}'::jsonb WHERE "id" = '2' AND "short_desc" IS NULL; +UPDATE "locations" SET "short_desc" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Топіарні фігури — 60+ персонажів улюблених казок у живому лісі."}]}]}}'::jsonb WHERE "id" = '1' AND "short_desc" IS NULL; +UPDATE "locations" SET "short_desc" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Стріляй та вигравай призи! Точний постріл приносить реальний виграш — для дітей та дорослих."}]}]}}'::jsonb WHERE "id" = '4' AND "short_desc" IS NULL; +UPDATE "locations" SET "short_desc" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Захоплюючий лабіринт з дзеркалами та оптичними ілюзіями. Спробуй знайти вихід!"}]}]}}'::jsonb WHERE "id" = '3' AND "short_desc" IS NULL; +UPDATE "locations" SET "short_desc" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ігровий майданчик для наймолодших відвідувачів. Безпечно, весело та під наглядом."}]}]}}'::jsonb WHERE "id" = '5' AND "short_desc" IS NULL; + +-- ── home_page_why_parents_items ───────────────────────────────── +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"ДиноПарк, Диво Ліс, Дзеркальний лабіринт — кожна локація це окремий всесвіт пригод для дітей і батьків."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd7b' AND "description" IS NULL; +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми оновлюємо тематику та декорації до кожного сезону, тому тут буде цікаво кожного візиту. А у вас з''являться нові яскраві фото у сімейному альбомі."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd7c' AND "description" IS NULL; +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Зима, весна, літо, осінь — кожен сезон у парку неповторний. Святкові декорації, сезонні активності та тематичні заходи чекають на вас."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd7d' AND "description" IS NULL; +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Всі атракції та зони проходять регулярну перевірку. Охоронці, медичний персонал та чіткі правила безпеки забезпечують спокій для батьків."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd7e' AND "description" IS NULL; +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Паркування, вбиральні, зона для годування немовлят, укриття, фудкорт — все на місці, щоб ваш відпочинок був справді комфортним."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd7f' AND "description" IS NULL; +UPDATE "home_page_why_parents_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Хот-доги, піца, кава, лимонади та багато іншого. Є дитяче меню та здорові перекуси — ніхто не залишиться голодним."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd80' AND "description" IS NULL; + +-- ── home_page_hero_slides ─────────────────────────────────────── +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Найбільші динозаври України, які гарчать і рухаються"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b2' AND "subtitle" IS NULL; +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Топіарні фігури з улюблених казок у живому лісі"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b3' AND "subtitle" IS NULL; +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Захопливий лабіринт з дзеркалами та оптичними ілюзіями"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b4' AND "subtitle" IS NULL; +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сімейний тематичний парк — де казка оживає"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b5' AND "subtitle" IS NULL; +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Незабутнє свято для вашої дитини у Шуміленді"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b6' AND "subtitle" IS NULL; +UPDATE "home_page_hero_slides" SET "subtitle" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Щороку фотографуйтесь біля улюбленого динозавра"}]}]}}'::jsonb WHERE "id" = '6a21a2763da5c400011ae5b7' AND "subtitle" IS NULL; + +-- ── home_page_faq_items ───────────────────────────────────────── +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Вартість вхідного квитка до ДиноПарку — 300 грн. Є комбо-квитки на кількох відвідувачів зі знижкою. Актуальні ціни та варіанти квитків дивіться у розділі «Квитки»."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd81' AND "answer" IS NULL; +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Шуміленд розроблений для дітей від 3 до 14 років, але й дорослі знаходять тут чимало цікавого. Для найменших є безпечні зони зі спрощеними атракціонами, для старших — більш захоплюючі маршрути."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd82' AND "answer" IS NULL; +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Парк відкритий щодня з 11:00 до 20:00. У святкові дні та під час спеціальних заходів графік може змінюватись — слідкуйте за анонсами у соцмережах."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd83' AND "answer" IS NULL; +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Так, для відвідувачів Шуміленду передбачена безкоштовна парковка безпосередньо біля входу в парк."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd84' AND "answer" IS NULL; +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Так! Ми пропонуємо кілька пакетів для святкування дня народження: від базового з арендою зони та аніматором до преміального з кейтерингом та тематичним декором. Детальніше — у розділі «Дні народження»."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd85' AND "answer" IS NULL; +UPDATE "home_page_faq_items" SET "answer" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"У Шуміленді є власний фудкорт з хот-догами, піцою, кавою, лимонадами та дитячим меню. Також є зони зі столиками, де можна відпочити і поїсти."}]}]}}'::jsonb WHERE "id" = '6a217f4f89743e0017d9cd86' AND "answer" IS NULL; + +-- ── dinosaur_page_activities ──────────────────────────────────── +UPDATE "dinosaur_page_activities" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Дізнайтеся неймовірні факти про найвідоміших динозаврів планети. "}]},{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Екскурсійна група від 10 людей, час екскурсії 30 хв. "}]}]}}'::jsonb WHERE "id" = '6a1d8f6e2edb48ff88c4339b' AND "description" IS NULL; +UPDATE "dinosaur_page_activities" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Власноруч розкопайте скам''янілості та зробіть справжнє відкриття"}]}]}}'::jsonb WHERE "id" = '6a1d8f6e2edb48ff88c4339c' AND "description" IS NULL; +UPDATE "dinosaur_page_activities" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Втримайся на динозаврі та відчуй справжній драйв"}]}]}}'::jsonb WHERE "id" = '6a1d8f6e2edb48ff88c4339d' AND "description" IS NULL; + +-- ── dinosaur_page_why_visit_items ─────────────────────────────── +UPDATE "dinosaur_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Діти відкривають для себе світ динозаврів у легкій та цікавій формі. Знайомство з доісторичними гігантами перетворюється на захопливу пригоду, яка надихає дізнаватися більше"}]}]}}'::jsonb WHERE "id" = '6a1d8f4a2edb48ff88c4337b' AND "description" IS NULL; +UPDATE "dinosaur_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Рухи, звуки та реалістичний вигляд динозаврів створюють ефект справжньої зустрічі з мешканцями доісторичного світу"}]}]}}'::jsonb WHERE "id" = '6a1d8f4a2edb48ff88c4337c' AND "description" IS NULL; +UPDATE "dinosaur_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Зробіть ясркаві світлини поруч із Тиранозавром, Трицератопсом та іншими мешканцями Динопарку, щоб зберегти спогади про неймовірну пригоду"}]}]}}'::jsonb WHERE "id" = '6a1d8f4a2edb48ff88c4337d' AND "description" IS NULL; + +-- ── birthday_page_package_items ───────────────────────────────── +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Святкуйте день народження серед найбільших динозаврів України. Захопливі пригоди та незабутні емоції для іменинника і гостей."}]}]}}'::jsonb WHERE "id" = '0322234c-9c3d-45d2-895d-c2ce33c6ff47' AND "description" IS NULL; +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Казковий день народження серед чарівних істот і фантастичних локацій. Простір,де дитячі мрії оживають."}]}]}}'::jsonb WHERE "id" = '6dbb7539-73d7-4ef7-910b-287452f8695e' AND "description" IS NULL; +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Веселі випробування, несподівані поворити,море сміху та вражень."}]}]}}'::jsonb WHERE "id" = 'e8e08721-c93f-47fb-b1cd-06bddd2d2858' AND "description" IS NULL; + +-- ── birthday_page_why_items ───────────────────────────────────── +UPDATE "birthday_page_why_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми беремо на себе всі деталі: аніматорів, конкурси, прикраси та окрему зону для вашого свята. Вам залишається лише насолоджуватись."}]}]}}'::jsonb WHERE "id" = '6a20005feecef0000105664d' AND "description" IS NULL; +UPDATE "birthday_page_why_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Шумілеленд - це цілий світ розваг в одному парку. Динозаври, Диво Ліс, Дзеркальний лабіринт, атракціони та безліч активностей, які захоплять кожного гостя будь-якого віку."}]}]}}'::jsonb WHERE "id" = '6a20005feecef0000105664e' AND "description" IS NULL; +UPDATE "birthday_page_why_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Яскраві локації, улюблені персонажі та щирі дитячі емоції - запорука гарних світлин!"}]}]}}'::jsonb WHERE "id" = '6a20005feecef0000105664f' AND "description" IS NULL; + +-- ── dyvolis_page_why_visit_items ──────────────────────────────── +UPDATE "dyvolis_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Вигадуйте казки та пригоди разом із дітьми - кожна топіарна фігура стає героєм нової історії. Тут уява оживає, а звичайна прогулянка перетворюється на захопливу подорож"}]}]}}'::jsonb WHERE "id" = '6a1d8f842edb48ff88c433a0' AND "description" IS NULL; +UPDATE "dyvolis_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Диво Ліс гармонійно поєднує красу живої природи та казкових персонажів. Серед дерев вас чекають єдинороги, лісові звірята та чарівні композиції, що створюють атмосферу справжньої магії"}]}]}}'::jsonb WHERE "id" = '6a1d8f842edb48ff88c433a1' AND "description" IS NULL; +UPDATE "dyvolis_page_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Вражаючі топіарні фігури та казкові локації стануть ідеальним фоном для сімейних фотографій. Кожен куточок Диво Лісу створений, для незабутніх спогадів"}]}]}}'::jsonb WHERE "id" = '6a1d8f842edb48ff88c433a2' AND "description" IS NULL; + +-- ── tickets_page_combo_cards ──────────────────────────────────── +UPDATE "tickets_page_combo_cards" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Індивідуальний квиток для повного занурення в атмосферу парку."}]}]}}'::jsonb WHERE "id" = '6a204192ff112900011ac53f' AND "description" IS NULL; +UPDATE "tickets_page_combo_cards" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Оптимальний вибір для батьків та дитини (віком до 14 років)."}]}]}}'::jsonb WHERE "id" = '6a204192ff112900011ac543' AND "description" IS NULL; +UPDATE "tickets_page_combo_cards" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Універсальний сімейний пакет розваг для компанії з 4 людей."}]}]}}'::jsonb WHERE "id" = '6a204192ff112900011ac547' AND "description" IS NULL; +UPDATE "tickets_page_combo_cards" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Максимальний та найвигідніший пакет для великої родини."}]}]}}'::jsonb WHERE "id" = '6a204192ff112900011ac54b' AND "description" IS NULL; + +-- ── locations_why_visit_items ─────────────────────────────────── +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Хто краще влучить? Влаштуйте сімейний турнір і дізнайтесь, хто найточніший стрілець."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c4' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Кожен учасник отримує шанс виграти приз — мотивація є завжди!"}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c5' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Легко навчитись, важко зупинитись — тир приваблює і малят, і дорослих."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c6' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Три рівні складності — від легкого до expert. Підходить і малюкам, і дорослим."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5bf' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Кімнати з дзеркалами та оптичними ілюзіями, в яких неможливо не захопитись."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c0' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Шукайте вихід разом — чудовий командний досвід для всієї родини."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c1' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"26 унікальних анімованих фігур динозаврів у повну величину — найбільша колекція в Україні."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5ba' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Екскурсії з гідом, палеонтологічні розкопки та ДиноРодео — для дітей будь-якого віку."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5bb' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Сфотографуйтесь поруч з T-Rex чи іншими велетнями — кадри, які вразять всіх друзів."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5bc' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Вигадуйте казки та пригоди разом із дітьми — кожна топіарна фігурка стає новою сторінкою вашої власної чарівної історії."}]}]}}'::jsonb WHERE "id" = 'wvi-dyvolis-1' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Ми створили локацію, в якій гармонійно поєднуються казкові фігури та жива природа. Прогулянка лісом ще не була такою захопливою."}]}]}}'::jsonb WHERE "id" = 'wvi-dyvolis-2' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Унікальні топіарні декорації та яскраві персонажі — ідеальний фон для незабутніх сімейних фотографій, які захочеться переглядати знову і знову."}]}]}}'::jsonb WHERE "id" = 'wvi-dyvolis-3' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Все обладнання сертифіковане, покриття м''яке — малюки можуть гратись без ризику."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5c9' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Відмінне місце, щоб познайомитися з іншими дітьми та провести час разом."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5ca' AND "description" IS NULL; +UPDATE "locations_why_visit_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Поки дітки бавляться, у вас є час нарешті перепочити та насолодитись парком."}]}]}}'::jsonb WHERE "id" = '6a21a3bc3da5c400011ae5cb' AND "description" IS NULL; + +-- ── birthday_page_package_items created after the backup (descriptions unrecoverable; placeholder copy — review in CMS) ── +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Улюблені персонажі проведуть свято, розважатимуть гостей конкурсами та іграми."}]}]}}'::jsonb WHERE "id" = '192af568-1bbd-43af-92c9-f3ff9d8756c6' AND "description" IS NULL; +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Яскраві малюнки на обличчях для іменинника та всіх гостей свята."}]}]}}'::jsonb WHERE "id" = 'a75097b7-0cce-415d-af8d-af87dbf5b856' AND "description" IS NULL; +UPDATE "birthday_page_package_items" SET "description" = '{"root":{"type":"root","version":1,"direction":"ltr","format":"","indent":0,"children":[{"type":"paragraph","version":1,"direction":"ltr","format":"","indent":0,"textFormat":0,"textStyle":"","children":[{"type":"text","version":1,"detail":0,"format":0,"mode":"normal","style":"","text":"Окрема зона для вашої компанії, де зручно святкувати та відпочивати."}]}]}}'::jsonb WHERE "id" = 'b8cef4e2-406c-43be-81a9-c9c13e44c332' AND "description" IS NULL; diff --git a/scripts/restore-richtext-from-backup.mjs b/scripts/restore-richtext-from-backup.mjs new file mode 100644 index 0000000..90735db --- /dev/null +++ b/scripts/restore-richtext-from-backup.mjs @@ -0,0 +1,149 @@ +// One-off recovery: migrations 0020/0021/0022 converted textarea columns to jsonb +// with `USING NULL`, wiping content. This script extracts the original plain-text +// values from the pre-wipe pg_dump and emits UPDATE statements that re-fill the +// columns as Lexical editor-state JSON. Guarded with `IS NULL` so re-running never +// overwrites content editors have re-entered since. +// +// Usage: node scripts/restore-richtext-from-backup.mjs + +import { readFileSync, writeFileSync } from 'node:fs' + +const [dumpPath, outPath] = process.argv.slice(2) +if (!dumpPath || !outPath) { + console.error('Usage: node restore-richtext-from-backup.mjs ') + process.exit(1) +} + +// (table, columns to restore). Key column is always `id`. +const TARGETS = { + dinosaur_page: ['hero_description', 'activities_description'], + dyvolis_page: ['hero_description'], + tickets_page: ['benefits_footnote'], + home_page: ['hero_subtitle', 'birthday_intro_text', 'news_subtitle'], + group_visits_page: ['hero_description', 'feature_text', 'bottom_text', 'price_description'], + legal_pages: ['privacy_content', 'terms_content', 'offer_content', 'data_processing_content'], + locations: ['short_desc'], + home_page_why_parents_items: ['description'], + home_page_hero_slides: ['subtitle'], + home_page_faq_items: ['answer'], + dinosaur_page_activities: ['description'], + dinosaur_page_why_visit_items: ['description'], + birthday_page_package_items: ['description'], + birthday_page_why_items: ['description'], + dyvolis_page_why_visit_items: ['description'], + tickets_page_combo_cards: ['description'], + locations_why_visit_items: ['description'], +} + +function unescapeCopyField(raw) { + if (raw === '\\N') return null + let out = '' + for (let i = 0; i < raw.length; i++) { + if (raw[i] !== '\\') { + out += raw[i] + continue + } + const c = raw[++i] + if (c === 'n') out += '\n' + else if (c === 't') out += '\t' + else if (c === 'r') out += '\r' + else if (c === '\\') out += '\\' + else if (c === 'b') out += '\b' + else if (c === 'f') out += '\f' + else if (c === 'v') out += '\v' + else out += c + } + return out +} + +function parseCopyBlocks(sqlText) { + const lines = sqlText.split('\n') + const tables = {} + for (let i = 0; i < lines.length; i++) { + const m = lines[i].match(/^COPY public\.(\w+) \(([^)]+)\) FROM stdin;$/) + if (!m) continue + const [, table, colsRaw] = m + if (!(table in TARGETS)) continue + const cols = colsRaw.split(', ').map((c) => c.replace(/"/g, '')) + const rows = [] + for (i++; i < lines.length && lines[i] !== '\\.'; i++) { + const fields = lines[i].split('\t').map(unescapeCopyField) + rows.push(Object.fromEntries(cols.map((c, j) => [c, fields[j]]))) + } + tables[table] = rows + } + return tables +} + +function textToLexical(text) { + const paragraphs = text.split('\n').map((line) => ({ + type: 'paragraph', + version: 1, + direction: 'ltr', + format: '', + indent: 0, + textFormat: 0, + textStyle: '', + children: + line === '' + ? [] + : [ + { + type: 'text', + version: 1, + detail: 0, + format: 0, + mode: 'normal', + style: '', + text: line, + }, + ], + })) + return { + root: { + type: 'root', + version: 1, + direction: 'ltr', + format: '', + indent: 0, + children: paragraphs, + }, + } +} + +const sqlQuote = (s) => `'${s.replace(/'/g, "''")}'` + +const dump = readFileSync(dumpPath, 'utf8') +const tables = parseCopyBlocks(dump) + +const out = [ + '-- Restore richText content wiped by migrations 0020/0021/0022 (ALTER TYPE ... USING NULL).', + '-- Values extracted from pre-webp-migration-20260610_135729.sql.gz and wrapped as Lexical JSON.', + '-- Idempotent: only fills columns that are still NULL.', + '', +] +let count = 0 + +for (const [table, cols] of Object.entries(TARGETS)) { + const rows = tables[table] + if (!rows) { + console.warn(`WARN: table ${table} not found in dump`) + continue + } + out.push(`-- ── ${table} ${'─'.repeat(Math.max(2, 60 - table.length))}`) + for (const row of rows) { + for (const col of cols) { + const text = row[col] + if (text == null || text.trim() === '') continue + const json = JSON.stringify(textToLexical(text)) + out.push( + `UPDATE "${table}" SET "${col}" = ${sqlQuote(json)}::jsonb WHERE "id" = ${sqlQuote(String(row.id))} AND "${col}" IS NULL;` + ) + count++ + } + } + out.push('') +} + +writeFileSync(outPath, out.join('\n')) +console.log(`Wrote ${count} UPDATE statements to ${outPath}`)