# Подключение PouchDB PouchDB = require 'pouchdb' # Важно сохранять для seed-events.coffee debug = require('../../../utils/coffee/debug.coffee').default class DatabaseSeeder constructor: (dbName, baseUrl = 'http://oleg:631074@localhost:5984') -> @dbName = dbName @baseUrl = baseUrl @db = new PouchDB(@baseUrl+"/"+@dbName) @designDoc = require './design-documents.coffee' @orderCounter = 0 @currentYear = new Date().getFullYear() # Генератор ID для категорий generateCategoryId: (name, parentId = null, domain = null) -> slug = name[0] # Берем первый язык для генерации slug .toLowerCase() .replace(/[^a-z0-9а-яё]/g, '_') .replace(/_+/g, '_') .replace(/^_|_$/g, '') id = "category_"+slug if parentId parentSlug = parentId.replace(/^category_/, '') id += "_"+parentSlug if domain domainPart = domain.replace(/\./g, '_') id += "_"+domainPart return id # Генератор ID для заказов generateOrderId: -> @orderCounter++ return "order_"+@currentYear+"_"+@orderCounter.toString().padStart(3, '0') # Генератор ID для блог постов generateBlogPostId: (title, domain = null) -> slug = title[0] # Берем первый язык для генерации slug .toLowerCase() .replace(/[^a-z0-9а-яё]/g, '_') .replace(/_+/g, '_') .replace(/^_|_$/g, '') year = new Date().getFullYear() id = "blog_post_"+slug+"_"+year if domain domainPart = domain.replace(/\./g, '_') id += "_"+domainPart return id # Генератор ID для мероприятий generateEventId: (title, eventDate, domain = null) -> slug = title[0] # Берем первый язык для генерации slug .toLowerCase() .replace(/[^a-z0-9а-яё]/g, '_') .replace(/_+/g, '_') .replace(/^_|_$/g, '') date = new Date(eventDate) year = date.getFullYear() month = (date.getMonth() + 1).toString().padStart(2, '0') id = "event_"+slug+"_"+year+"_"+month if domain domainPart = domain.replace(/\./g, '_') id += "_"+domainPart return id # Генератор ID для товаров generateProductId: (title, domain = null) -> slug = title[0] # Берем первый язык для генерации slug .toLowerCase() .replace(/[^a-z0-9а-яё]/g, '_') .replace(/_+/g, '_') .replace(/^_|_$/g, '') year = new Date().getFullYear() id = "product_"+slug+"_"+year if domain domainPart = domain.replace(/\./g, '_') id += "_"+domainPart return id # Генератор ID для слайдов generateSlideId: (order, domain = null) -> id = "slide_"+order.toString().padStart(2, '0') if domain domainPart = domain.replace(/\./g, '_') id += "_"+domainPart return id # Проверка существования базы данных checkDatabaseExists: -> try info = await @db.info() debug.log "База данных "+@dbName+" существует" return true catch error debug.log "База данных "+@dbName+" не существует: "+error return false # Создание базы данных если не существует createDatabaseIfNotExists: -> exists = await @checkDatabaseExists() if not exists try response = await fetch(@baseUrl+"/"+@dbName, method: 'PUT') if response.ok debug.log "База данных "+@dbName+" создана" else debug.log "Ошибка создания базы: "+response.statusText catch error debug.log "Ошибка при создании базы: "+error return exists # Удаление старых версий документов cleanupOldDocuments: -> try debug.log "Начало очистки старых документов" allDocs = await @db.allDocs(include_docs: true) documentsToDelete = [] documentsToKeep = new Set() documentsByType = {} for row in allDocs.rows doc = row.doc if doc._id.startsWith('_design/') continue docType = doc.type or 'unknown' if not documentsByType[docType] documentsByType[docType] = [] documentsByType[docType].push(doc) for docType, docs of documentsByType if docs.length <= 6 for doc in docs documentsToKeep.add(doc._id) continue sortedDocs = docs.sort (a, b) -> new Date(b.created_at) - new Date(a.created_at) for doc, index in sortedDocs if index < 6 documentsToKeep.add(doc._id) else documentsToDelete.push({ _id: doc._id _rev: doc._rev _deleted: true }) if documentsToDelete.length > 0 result = await @db.bulkDocs(documentsToDelete) debug.log "Удалено старых документов: "+documentsToDelete.length else debug.log "Старые документы для удаления не найдены" debug.log "Очистка старых документов завершена" catch error debug.log "Ошибка при очистке старых документов: "+error # Проверка и создание design документов setupDesignDocuments: -> try for designName, designDoc of @designDoc docId = "_design/"+designName try currentDoc = await @db.get(docId) if currentDoc.version isnt designDoc.version debug.log "Обновление design документа: "+designName designDoc._id = docId designDoc._rev = currentDoc._rev await @db.put(designDoc) debug.log "Design документ "+designName+" обновлен до версии "+designDoc.version else debug.log "Design документ "+designName+" актуален" catch error if error.status is 404 debug.log "Создание design документа: "+designName designDoc._id = docId await @db.put(designDoc) debug.log "Design документ "+designName+" создан" else throw error catch error debug.log "Ошибка при настройке design документов: "+error # Создание иерархической структуры категорий с мультиязычностью createCategoryHierarchy: -> categories = [ # Корневые категории { _id: @generateCategoryId(["Мероприятия", "Events", "Чорабиниҳо"], null, "borbad") type: "category" domain: ["borbad.s5l.ru", "concert-hall.tj"] language: ["ru", "en", "tj"] name: ["Мероприятия", "Events", "Чорабиниҳо"] slug: ["events", "events", "chorabinīho"] description: ["Все мероприятия концертного зала", "All concert hall events", "Ҳамаи чорабиниҳои ҳолли консерт"] image: [ "/assets/borbad.s5l.ru/categories/events.jpg" "/assets/borbad.s5l.ru/categories/events.jpg" "/assets/borbad.s5l.ru/categories/events.jpg" ] icon: ["calendar", "calendar", "calendar"] parent_id: null parent_path: [] level: 0 order: 1 children_count: 4 meta_title: ["Мероприятия - Кохи Борбад", "Events - Borbad Concert Hall", "Чорабиниҳо - Ҳолли Борбад"] meta_description: ["Концерты, выставки и другие мероприятия в концертном зале Борбад", "Concerts, exhibitions and other events at Borbad Concert Hall", "Консертҳо, намоишҳо ва дигар чорабиниҳо дар ҳолли консертии Борбад"] active: true featured: true show_in_menu: true menu_order: 1 color: ["#3B82F6", "#3B82F6", "#3B82F6"] created_at: new Date().toISOString() updated_at: new Date().toISOString() } { _id: @generateCategoryId(["Новости", "News", "Хабарҳо"], null, "borbad") type: "category" domain: ["borbad.s5l.ru"] language: ["ru", "en", "tj"] name: ["Новости", "News", "Хабарҳо"] slug: ["news", "news", "khabarho"] description: ["Новости и анонсы концертного зала", "News and announcements of the concert hall", "Хабарҳо ва эълонҳои ҳолли консерт"] image: [ "/assets/borbad.s5l.ru/categories/news.jpg" "/assets/borbad.s5l.ru/categories/news.jpg" "/assets/borbad.s5l.ru/categories/news.jpg" ] icon: ["news", "news", "news"] parent_id: null parent_path: [] level: 0 order: 2 children_count: 0 meta_title: ["Новости - Кохи Борбад", "News - Borbad Concert Hall", "Хабарҳо - Ҳолли Борбад"] meta_description: ["Последние новости и анонсы концертного зала Борбад", "Latest news and announcements from Borbad Concert Hall", "Охирин хабарҳо ва эълонҳои ҳолли консертии Борбад"] active: true featured: false show_in_menu: true menu_order: 2 color: ["#10B981", "#10B981", "#10B981"] created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Подкатегории для "Мероприятия" { _id: @generateCategoryId(["Концерты", "Concerts", "Консертҳо"], "category_events_borbad", "borbad") type: "category" domain: ["borbad.s5l.ru", "concert-hall.tj"] language: ["ru", "en", "tj"] name: ["Концерты", "Concerts", "Консертҳо"] slug: ["concerts", "concerts", "konsert-ho"] description: ["Музыкальные концерты различных жанров", "Music concerts of various genres", "Консертҳои мусиқии навъҳои гуногун"] image: [ "/assets/borbad.s5l.ru/categories/concerts.jpg" "/assets/borbad.s5l.ru/categories/concerts.jpg" "/assets/borbad.s5l.ru/categories/concerts.jpg" ] icon: ["music", "music", "music"] parent_id: "category_events_borbad" parent_path: ["category_events_borbad"] level: 1 order: 1 children_count: 3 meta_title: ["Концерты - Кохи Борбад", "Concerts - Borbad Concert Hall", "Консертҳо - Ҳолли Борбад"] meta_description: ["Музыкальные концерты в концертном зале Борбад", "Music concerts at Borbad Concert Hall", "Консертҳои мусиқӣ дар ҳолли консертии Борбад"] active: true featured: true show_in_menu: true menu_order: 1 color: ["#6366F1", "#6366F1", "#6366F1"] created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Подкатегории для "Концерты" { _id: @generateCategoryId(["Классическая музыка", "Classical Music", "Мусиқии классикӣ"], "category_concerts_events_borbad", "borbad") type: "category" domain: ["borbad.s5l.ru", "concert-hall.tj"] language: ["ru", "en", "tj"] name: ["Классическая музыка", "Classical Music", "Мусиқии классикӣ"] slug: ["classical-music", "classical-music", "musiqii-klasikī"] description: ["Симфонические концерты и классические произведения", "Symphonic concerts and classical works", "Консертҳои симфонӣ ва осори классикӣ"] image: [ "/assets/borbad.s5l.ru/categories/classical-music.jpg" "/assets/borbad.s5l.ru/categories/classical-music.jpg" "/assets/borbad.s5l.ru/categories/classical-music.jpg" ] icon: ["classical", "classical", "classical"] parent_id: "category_concerts_events_borbad" parent_path: ["category_events_borbad", "category_concerts_events_borbad"] level: 2 order: 1 children_count: 0 meta_title: ["Классическая музыка - Кохи Борбад", "Classical Music - Borbad Concert Hall", "Мусиқии классикӣ - Ҳолли Борбад"] meta_description: ["Симфонические концерты и классические произведения", "Symphonic concerts and classical works", "Консертҳои симфонӣ ва осори классикӣ"] active: true featured: true show_in_menu: true menu_order: 1 color: ["#3B82F6", "#3B82F6", "#3B82F6"] created_at: new Date().toISOString() updated_at: new Date().toISOString() } ] return categories # Создание тестовых данных для сайта с новой структурой createSampleData: -> currentDate = new Date().toISOString() sampleData = [ # Доменные настройки { _id: "domain_settings_borbad_s5l_ru" type: "domain_settings" domain: "borbad.s5l.ru" name: ["Кохи Борбад - Концертный зал Душанбе", "Borbad Concert Hall - Dushanbe"] description: ["Официальный сайт концертного зала Борбад", "Official website of Borbad Concert Hall"] active: true priority: 1 theme: "borbad" languages: ["ru", "en", "tj"] default_language: "ru" timezone: "Asia/Dushanbe" currency: "TJS" settings: { seo: { title_template: ["{page} - Кохи Борбад", "{page} - Borbad Concert Hall"] description: ["Концертный зал Борбад - культурный центр Душанбе", "Borbad Concert Hall - Dushanbe Cultural Center"] keywords: [["концерты", "мероприятия", "Душанбе", "культура"], ["concerts", "events", "Dushanbe", "culture"]] } social: { facebook: "https://facebook.com/borbad" instagram: "https://instagram.com/borbad" twitter: "https://twitter.com/borbad" } contact: { address: ["г. Душанбе, пр. Рудаки 22", "Rudaki Ave 22, Dushanbe"] phone: ["+992 37 123-45-67", "+992 37 123-45-67"] email: ["info@borbad.s5l.ru", "info@borbad.s5l.ru"] } features: { online_booking: true multi_language: true ecommerce: true } } created_at: currentDate updated_at: currentDate } # Добавляем иерархические категории ...@createCategoryHierarchy() # Блог посты с мультиязычными массивами { _id: @generateBlogPostId(["Открытие нового сезона 2024", "Opening of the new season 2024"], "borbad") type: "blog_post" domain: ["borbad.s5l.ru", "global"] language: ["ru", "en"] title: ["Открытие нового сезона 2024", "Opening of the new season 2024"] content: [ "# Добро пожаловать в новый творческий сезон!\n\nМы рады объявить о начале нового сезона в концертном зале Борбад. В этом году нас ждут удивительные события и незабываемые впечатления.", "# Welcome to the new creative season!\n\nWe are pleased to announce the start of the new season at the Borbad Concert Hall. This year we have amazing events and unforgettable experiences awaiting us." ] excerpt: [ "Новый творческий сезон 2024 года в концертном зале Борбад", "New creative season 2024 at the Borbad Concert Hall" ] seo: { description: [ "Концертный зал Борбад открывает новый сезон 2024 года", "Borbad Concert Hall opens the 2024 season" ] keywords: [ ["новости", "сезон", "анонс", "Борбад"], ["news", "season", "announcement", "Borbad"] ] title: [ "Открытие нового сезона 2024 - Кохи Борбад", "Opening of the new season 2024 - Borbad Concert Hall" ] } image: [ "/assets/borbad.s5l.ru/posts/season-opening.jpg" "/assets/borbad.s5l.ru/posts/season-opening.jpg" ] gallery: [ [ "/assets/borbad.s5l.ru/gallery/post1.jpg" "/assets/borbad.s5l.ru/gallery/post2.jpg" ], [ "/assets/borbad.s5l.ru/gallery/post1.jpg" "/assets/borbad.s5l.ru/gallery/post2.jpg" ] ] tags: [ ["новости", "сезон", "анонс"], ["news", "season", "announcement"] ] category_id: "category_news_borbad" category_path: ["category_news_borbad"] author: ["Администрация Борбад", "Borbad Administration"] status: "published" featured: true reading_time: [5, 5] created_at: currentDate updated_at: currentDate published_at: currentDate views: 156 likes: 23 shares: 45 } # События (мероприятия) с мультиязычными данными { _id: @generateEventId(["Симфонический концерт: Бетховен и Чайковский", "Symphonic Concert: Beethoven and Tchaikovsky"], "2024-03-20T19:00:00.000Z", "borbad") type: "event" domain: ["borbad.s5l.ru", "concert-hall.tj"] language: ["ru", "en", "tj"] title: ["Симфонический концерт: Бетховен и Чайковский", "Symphonic Concert: Beethoven and Tchaikovsky", "Консерти симфонӣ: Бетховен ва Чайковский"] content: [ "# Великие композиторы\n\n## Программа концерта\n\n- **Л. ван Бетховен** - Симфония №5\n- **П.И. Чайковский** - Лебединое озеро (сюита)\n- **П.И. Чайковский** - Щелкунчик (сюита)\n\n## Исполнители\n\nСимфонический оркестр Борбад под управлением дирижера Фарруха Саидова.", "# Great Composers\n\n## Concert Program\n\n- **L. van Beethoven** - Symphony No. 5\n- **P.I. Tchaikovsky** - Swan Lake (suite)\n- **P.I. Tchaikovsky** - The Nutcracker (suite)\n\n## Performers\n\nBorbad Symphony Orchestra conducted by Farrukh Saidov.", "# Оҳангсозони бузург\n\n## Барномаи консерт\n\n- **Л. ван Бетховен** - Симфония №5\n- **П.И. Чайковский** - Озори ҳоҷилагак (сюита)\n- **П.И. Чайковский** - Қозуқанд (сюита)\n\n## Иҷрокунандагон\n\nОркестри симфонии Борбад зери роҳбарии дирижёр Фаррух Саидов." ] excerpt: [ "Симфонический концерт с произведениями Бетховена и Чайковского", "Symphonic concert with works by Beethoven and Tchaikovsky", "Консерти симфонӣ бо осори Бетховен ва Чайковский" ] seo: { description: [ "Симфонический концерт в зале Борбад - классическая музыка", "Symphonic concert at Borbad Hall - classical music", "Консерти симфонӣ дар ҳолли Борбад - мусиқии классикӣ" ] keywords: [ ["концерт", "симфоническая музыка", "классика", "Бетховен", "Чайковский"], ["concert", "symphonic music", "classical", "Beethoven", "Tchaikovsky"], ["консерт", "мусиқии симфонӣ", "классикӣ", "Бетховен", "Чайковский"] ] title: [ "Симфонический концерт: Бетховен и Чайковский - Кохи Борбад", "Symphonic Concert: Beethoven and Tchaikovsky - Borbad Concert Hall", "Консерти симфонӣ: Бетховен ва Чайковский - Ҳолли Борбад" ] } image: [ "/assets/borbad.s5l.ru/events/beethoven-concert.jpg" "/assets/borbad.s5l.ru/events/beethoven-concert.jpg" "/assets/borbad.s5l.ru/events/beethoven-concert.jpg" ] gallery: [ [ "/assets/borbad.s5l.ru/gallery/concert1.jpg" "/assets/borbad.s5l.ru/gallery/concert2.jpg" ], [ "/assets/borbad.s5l.ru/gallery/concert1.jpg" "/assets/borbad.s5l.ru/gallery/concert2.jpg" ], [ "/assets/borbad.s5l.ru/gallery/concert1.jpg" "/assets/borbad.s5l.ru/gallery/concert2.jpg" ] ] tags: [ ["концерт", "симфоническая музыка", "классика", "Бетховен", "Чайковский"], ["concert", "symphonic music", "classical", "Beethoven", "Tchaikovsky"], ["консерт", "мусиқии симфонӣ", "классикӣ", "Бетховен", "Чайковский"] ] category_id: "category_classical_music_concerts_events_borbad" category_path: ["category_events_borbad", "category_concerts_events_borbad", "category_classical_music_concerts_events_borbad"] author: ["Симфонический оркестр Борбад", "Borbad Symphony Orchestra", "Оркестри симфонии Борбад"] status: "published" featured: true reading_time: [4, 4, 4] # Дополнительные поля для событий event_data: { event_date: "2024-03-20T19:00:00.000Z" end_date: "2024-03-20T21:00:00.000Z" location: ["Большой зал", "Main Hall", "Ҳолли асосӣ"] venue_id: "venue_main_hall_borbad" address: { street: ["пр. Рудаки 22", "Rudaki Ave 22", "хиёбони Рӯдакӣ 22"] city: ["Душанбе", "Dushanbe", "Душанбе"] country: ["Таджикистан", "Tajikistan", "Тоҷикистон"] } coordinates: { lat: 38.5732 lng: 68.7734 } price: [500, 500, 500] currency: "TJS" available_tickets: 45 total_tickets: 300 status: "upcoming" registration_required: true max_attendees: 300 age_restriction: ["6+", "6+", "6+"] organizer: ["Симфонический оркестр Борбад", "Borbad Symphony Orchestra", "Оркестри симфонии Борбад"] performers: [ ["Фаррух Саидов (дирижер)", "Солисты оркестра"], ["Farrukh Saidov (conductor)", "Orchestra soloists"], ["Фаррух Саидов (дирижёр)", "Солистони оркестр"] ] duration: 120 } created_at: currentDate updated_at: currentDate published_at: currentDate views: 289 } # Товары с мультиязычными данными { _id: @generateProductId(["Футболка с логотипом Борбад", "Borbad Logo T-shirt"], "borbad") type: "product" domain: ["shop.borbad.s5l.ru", "borbad.s5l.ru"] language: ["ru", "en"] title: ["Футболка с логотипом Борбад", "Borbad Logo T-shirt"] content: [ "## Качественная хлопковая футболка\n\nРазмеры: S, M, L, XL\n\nМатериал: 100% хлопок\n\nУход: машинная стирка при 30°C", "## High-quality cotton t-shirt\n\nSizes: S, M, L, XL\n\nMaterial: 100% cotton\n\nCare: machine wash at 30°C" ] excerpt: [ "Фирменная футболка концертного зала с логотипом", "Official concert hall t-shirt with logo" ] seo: { description: [ "Футболка с логотипом концертного зала Борбад - сувениры", "T-shirt with Borbad concert hall logo - souvenirs" ] keywords: [ ["футболка", "сувениры", "мерч", "Борбад"], ["t-shirt", "souvenirs", "merch", "Borbad"] ] title: [ "Футболка с логотипом Борбад - Сувениры", "Borbad Logo T-shirt - Souvenirs" ] } image: [ "/assets/borbad.s5l.ru/products/tshirt.jpg" "/assets/borbad.s5l.ru/products/tshirt.jpg" ] gallery: [ [ "/assets/borbad.s5l.ru/products/tshirt-front.jpg" "/assets/borbad.s5l.ru/products/tshirt-back.jpg" ], [ "/assets/borbad.s5l.ru/products/tshirt-front.jpg" "/assets/borbad.s5l.ru/products/tshirt-back.jpg" ] ] tags: [ ["одежда", "сувениры", "мерч"], ["clothing", "souvenirs", "merch"] ] category_id: "category_souvenirs_borbad" category_path: ["category_shop_borbad", "category_souvenirs_borbad"] author: ["Магазин Борбад", "Borbad Shop"] status: "published" featured: true reading_time: [2, 2] # Дополнительные поля для товаров product_data: { price: [250, 250] currency: "TJS" compare_price: [350, 350] sku: "TSH-BRB-001" inventory: 50 status: "available" attributes: { sizes: [["S", "M", "L", "XL"], ["S", "M", "L", "XL"]] colors: [["белый", "черный", "красный"], ["white", "black", "red"]] material: [["100% хлопок"], ["100% cotton"]] brand: [["Борбад"], ["Borbad"]] } weight: 0.3 dimensions: { length: 70 width: 50 height: 5 } shipping: { free_shipping: [false, false] shipping_cost: [50, 50] } } created_at: currentDate updated_at: currentDate published_at: currentDate views: 134 } # Слайдеры с мультиязычными данными { _id: @generateSlideId(1, "borbad") type: "slide" domain: ["borbad.s5l.ru", "concert-hall.tj"] language: ["ru", "en"] title: ["Добро пожаловать в Кохи Борбад", "Welcome to Borbad Concert Hall"] content: [ "## Современный концертный зал в сердце Душанбе\n\nМесто, где встречаются искусство и культура", "## Modern concert hall in the heart of Dushanbe\n\nA place where art and culture meet" ] excerpt: [ "Концертный зал Борбад - культурный центр Душанбе", "Borbad Concert Hall - Dushanbe Cultural Center" ] seo: { description: [ "Концертный зал Борбад в Душанбе", "Borbad Concert Hall in Dushanbe" ] } image: [ "/assets/borbad.s5l.ru/sliders/main-hall.jpg" "/assets/borbad.s5l.ru/sliders/main-hall.jpg" ] gallery: [[], []] tags: [ ["слайдер", "главная"], ["slider", "main"] ] category_id: "category_sliders_borbad" category_path: ["category_sliders_borbad"] author: ["Администрация Борбад", "Borbad Administration"] status: "published" featured: false reading_time: [1, 1] # Дополнительные поля для слайдеров slide_data: { order: 1 active: true button_text: ["Узнать больше", "Learn More"] button_link: ["/about", "/about"] button_style: "primary" text_color: ["#ffffff", "#ffffff"] text_position: ["center", "center"] overlay: [true, true] overlay_opacity: [0.4, 0.4] mobile_image: [ "/assets/borbad.s5l.ru/sliders/main-hall-mobile.jpg" "/assets/borbad.s5l.ru/sliders/main-hall-mobile.jpg" ] start_date: "2024-01-01T00:00:00.000Z" end_date: "2024-12-31T23:59:59.000Z" target_audience: [["all"], ["all"]] } created_at: "2024-01-01T00:00:00.000Z" updated_at: currentDate published_at: "2024-01-01T00:00:00.000Z" views: 0 } # Пользователи { _id: "user_admin_main" type: "user" domain: "global" email: "admin@borbad.s5l.ru" name: ["Администратор Борбад", "Borbad Administrator"] role: "admin" active: true permissions: ["read", "write", "delete", "admin"] profile: { avatar: [ "/assets/borbad.s5l.ru/avatars/admin.jpg" "/assets/borbad.s5l.ru/avatars/admin.jpg" ] phone: ["+992 37 123-45-67", "+992 37 123-45-67"] position: ["Системный администратор", "System Administrator"] bio: ["Ответственный за техническую часть сайта", "Responsible for the technical part of the site"] } preferences: { language: "ru" notifications: true theme: "dark" timezone: "Asia/Dushanbe" } security: { last_password_change: "2024-01-01T00:00:00.000Z" two_factor_enabled: true login_attempts: 0 } domains_access: ["borbad.s5l.ru", "concert-hall.tj"] created_at: "2024-01-01T00:00:00.000Z" updated_at: currentDate last_login: "2024-01-15T09:30:00.000Z" } ] try createdCount = 0 updatedCount = 0 for doc in sampleData try existing = await @db.get(doc._id) doc._rev = existing._rev await @db.put(doc) updatedCount++ debug.log "Обновлен документ: "+doc._id catch error if error.status is 404 await @db.put(doc) createdCount++ debug.log "Создан документ: "+doc._id else throw error debug.log "Тестовые данные успешно созданы: создано "+createdCount+", обновлено "+updatedCount catch error debug.log "Ошибка при создании тестовых данных: "+error # Основной метод инициализации initialize: -> debug.log "Начало инициализации базы данных" await @createDatabaseIfNotExists() await @cleanupOldDocuments() await @setupDesignDocuments() await @createSampleData() debug.log "Инициализация базы данных завершена" # Экспорт класса module.exports = DatabaseSeeder # Если файл запущен напрямую if require.main is module seeder = new DatabaseSeeder('borbad_events') seeder.initialize().catch (error) -> debug.log "Критическая ошибка инициализации: "+error