| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- # Подключение 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
|