# Подключение PouchDB PouchDB = require 'pouchdb' 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' # Проверка существования базы данных 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 # Создаем базу через PUT запрос 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 # Проверка и создание 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 # Создание тестовых данных createSampleData: -> sampleData = [ # Блог посты { _id: "blog_post_" + Math.floor(Math.random() * 9000) + 1000 type: "blog_post" title: "Добро пожаловать в Кохи Борбад" content: "# Добро пожаловать!\n\nМы рады приветствовать вас в нашем новом концертном зале." excerpt: "Приветственное сообщение нового концертного зала" image: "/assets/borbad.s5l.ru/welcome.jpg" tags: ["новости", "приветствие"] author: "Администрация" status: "published" created_at: new Date().toISOString() updated_at: new Date().toISOString() views: 0 } # Слайды { _id: "slide_"+Math.floor(Math.random() * 9000) + 1000 type: "slide" title: "Концертный зал Борбад" content: "## Современное пространство для искусства\n\nЛучшие мероприятия города" image: "/assets/borbad.s5l.ru/slide1.jpg" order: 1 active: true button_text: "Узнать больше" button_link: "/about" created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Мероприятия { _id: "event_"+Math.floor(Math.random() * 9000) + 1000 type: "event" title: "Симфонический концерт" content: "## Программа вечера\n\n- Бетховен Симфония №5\n- Чайковский Лебединое озеро" event_date: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString() end_date: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000 + 2 * 60 * 60 * 1000).toISOString() location: "Большой зал" price: 500 currency: "TJS" available_tickets: 100 total_tickets: 100 image: "/assets/borbad.s5l.ru/concert1.jpg" gallery: [ "/assets/borbad.s5l.ru/gallery1.jpg" "/assets/borbad.s5l.ru/gallery2.jpg" ] tags: ["концерт", "симфоническая музыка", "классика"] status: "upcoming" registration_required: true created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Товары { _id: "product_"+Math.floor(Math.random() * 9000) + 1000 type: "product" title: "Футболка с логотипом" content: "## Качественная хлопковая футболка\n\nРазмеры: S, M, L, XL" excerpt: "Фирменная футболка концертного зала" image: "/assets/borbad.s5l.ru/tshirt.jpg" price: 250 currency: "TJS" category: "сувениры" tags: ["одежда", "сувениры", "мерч"] attributes: sizes: ["S", "M", "L", "XL"] colors: ["белый", "черный"] material: "100% хлопок" inventory: 50 status: "available" created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Категории { _id: "category_"+Math.floor(Math.random() * 9000) + 1000 type: "category" name: "Концерты" slug: "concerts" description: "Музыкальные мероприятия" image: "/assets/borbad.s5l.ru/category-concerts.jpg" parent: null order: 1 created_at: new Date().toISOString() updated_at: new Date().toISOString() } # Темы { _id: "theme_"+Math.floor(Math.random() * 9000) + 1000 type: "theme" name: "Классическая музыка" slug: "classical-music" description: "Мероприятия классической музыки" color: "#3B82F6" created_at: new Date().toISOString() updated_at: new Date().toISOString() } ] try for doc in sampleData try # Проверяем существует ли документ existing = await @db.get(doc._id) doc._rev = existing._rev await @db.put(doc) debug.log "Обновлен документ: "+doc._id catch error if error.status is 404 # Документ не существует, создаем новый await @db.put(doc) debug.log "Создан документ: "+doc._id else throw error debug.log "Тестовые данные успешно созданы" catch error debug.log "Ошибка при создании тестовых данных: "+error # Основной метод инициализации initialize: -> debug.log "Начало инициализации базы данных" await @createDatabaseIfNotExists() 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