| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- # Подключение необходимых модулей
- CouchDB = require '../vue/app/core/CouchdbClass.coffee'
- debug = require('../../../utils/coffee/debug.coffee').default
- class EventSeeder
- constructor: ->
- @dbName = 'borbad_events'
- @baseUrl = 'http://oleg:631074@localhost:5984'
- @couch = new CouchDB(@baseUrl, @dbName)
- @designDoc =
- _id: '_design/app'
- views: {}
- lists: {}
- shows: {}
-
- # Версия design документа для контроля обновлений
- @designVersion = '1.0'
-
- # Проверка существования базы данных
- checkDatabase: ->
- try
- response = await fetch(@baseUrl+"/"+@dbName)
- if response.status == 404
- debug.log "База данных не найдена, создаем новую"
- await this.createDatabase()
- else if response.status == 200
- debug.log "База данных найдена"
- else
- debug.log "Ошибка при проверке базы: "+response.status
- catch error
- debug.log "Ошибка при проверке базы данных: "+error
-
- # Создание базы данных
- createDatabase: ->
- try
- response = await fetch(@baseUrl+"/"+@dbName,
- method: 'PUT'
- headers:
- 'Content-Type': 'application/json'
- )
- if response.status == 201
- debug.log "База данных успешно создана"
- else
- debug.log "Ошибка при создании базы: "+response.status
- catch error
- debug.log "Ошибка при создании базы данных: "+error
-
- # Проверка и создание/обновление design документов
- setupDesignDocuments: ->
- try
- # Получаем текущий design документ
- response = await fetch(@baseUrl+"/"+@dbName+"/_design/app")
-
- if response.status == 200
- existingDoc = await response.json()
- # Проверяем версию
- if existingDoc.version != @designVersion
- debug.log "Обновляем design документ до версии "+@designVersion
- @designDoc._rev = existingDoc._rev
- @designDoc.version = @designVersion
- await this.updateDesignDoc()
- else
- debug.log "Design документ актуален"
- else if response.status == 404
- debug.log "Design документ не найден, создаем новый"
- @designDoc.version = @designVersion
- await this.createDesignDoc()
- else
- debug.log "Ошибка при проверке design документа: "+response.status
-
- catch error
- debug.log "Ошибка при настройке design документов: "+error
-
- # Создание design документа
- createDesignDoc: ->
- try
- # Определяем views
- @designDoc.views =
- # Все записи блога
- all_blog_posts:
- map: """
- function(doc) {
- if (doc.type === 'blog_post' || doc.type === 'slide' || doc.type === 'event') {
- emit(doc.created_at, doc);
- }
- }
- """
-
- # Только мероприятия
- events_only:
- map: """
- function(doc) {
- if (doc.type === 'event') {
- emit(doc.event_date, doc);
- }
- }
- """
-
- # Только слайды
- slides_only:
- map: """
- function(doc) {
- if (doc.type === 'slide') {
- emit(doc.order, doc);
- }
- }
- """
-
- # Поиск по заголовку
- by_title:
- map: """
- function(doc) {
- if (doc.title) {
- emit(doc.title.toLowerCase(), doc);
- }
- }
- """
-
- # Поиск по тегам
- by_tags:
- map: """
- function(doc) {
- if (doc.tags && Array.isArray(doc.tags)) {
- doc.tags.forEach(function(tag) {
- emit(tag.toLowerCase(), doc);
- });
- }
- }
- """
-
- # Активные мероприятия (будущие)
- active_events:
- map: """
- function(doc) {
- if (doc.type === 'event' && doc.event_date) {
- var eventDate = new Date(doc.event_date);
- var now = new Date();
- if (eventDate >= now) {
- emit(doc.event_date, doc);
- }
- }
- }
- """
-
- response = await fetch(@baseUrl+"/"+@dbName+"/_design/app",
- method: 'PUT'
- headers:
- 'Content-Type': 'application/json'
- body: JSON.stringify(@designDoc)
- )
-
- if response.status == 201
- debug.log "Design документ успешно создан"
- else
- debug.log "Ошибка при создании design документа: "+response.status
-
- catch error
- debug.log "Ошибка при создании design документа: "+error
-
- # Обновление design документа
- updateDesignDoc: ->
- try
- response = await fetch(@baseUrl+"/"+@dbName+"/_design/app",
- method: 'PUT'
- headers:
- 'Content-Type': 'application/json'
- body: JSON.stringify(@designDoc)
- )
-
- if response.status == 201
- debug.log "Design документ успешно обновлен"
- else
- debug.log "Ошибка при обновлении design документа: "+response.status
-
- catch error
- debug.log "Ошибка при обновлении design документа: "+error
-
- # Добавление тестовых данных
- seedTestData: ->
- testData = [
- {
- _id: 'slide_welcome'
- type: 'slide'
- title: 'Добро пожаловать в Кохи Борбад'
- content: '# Концертный зал Борбад\n\nПриветствуем вас в самом современном концертном зале Душанбе!'
- image: '/assets/borbad.s5l.ru/welcome-slide.jpg'
- order: 1
- active: true
- created_at: new Date().toISOString()
- updated_at: new Date().toISOString()
- }
- {
- _id: 'event_concert_1'
- type: 'event'
- title: 'Симфонический оркестр'
- content: '## Концерт симфонического оркестра\n\nВ программе произведения классической музыки.'
- event_date: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString()
- location: 'Большой зал'
- price: 150
- tags: ['концерт', 'классика', 'оркестр']
- image: '/assets/borbad.s5l.ru/concert-1.jpg'
- created_at: new Date().toISOString()
- updated_at: new Date().toISOString()
- }
- {
- _id: 'blog_about'
- type: 'blog_post'
- title: 'О нашем зале'
- content: '## История создания\n\nКонцертный зал Борбад был открыт в 2023 году...'
- tags: ['история', 'архитектура']
- created_at: new Date().toISOString()
- updated_at: new Date().toISOString()
- }
- ]
-
- for doc in testData
- try
- response = await fetch(@baseUrl+"/"+@dbName+"/"+doc._id,
- method: 'PUT'
- headers:
- 'Content-Type': 'application/json'
- body: JSON.stringify(doc)
- )
-
- if response.status == 201
- debug.log "Документ "+doc._id+" успешно создан"
- else
- debug.log "Ошибка при создании документа "+doc._id+": "+response.status
-
- catch error
- debug.log "Ошибка при создании тестового документа: "+error
-
- # Основной метод инициализации
- initialize: ->
- debug.log "Начало инициализации базы данных мероприятий"
- await this.checkDatabase()
- await this.setupDesignDocuments()
- await this.seedTestData()
- debug.log "Инициализация базы данных завершена"
- # Экспорт класса
- module.exports = EventSeeder
- # Если файл запускается напрямую
- if require.main == module
- seeder = new EventSeeder()
- seeder.initialize()
|