|
|
@@ -0,0 +1,270 @@
|
|
|
+#!/usr/bin/env coffee
|
|
|
+
|
|
|
+# Скрипт для добавления тестовых мероприятий в CouchDB
|
|
|
+
|
|
|
+class EventSeeder
|
|
|
+ constructor: ->
|
|
|
+ @baseUrl = 'http://localhost:5984'
|
|
|
+ @dbName = 'kohi_borbad_events'
|
|
|
+ @headers =
|
|
|
+ 'Content-Type': 'application/json'
|
|
|
+ 'Authorization': 'Basic ' + Buffer.from('oleg:631074').toString('base64')
|
|
|
+
|
|
|
+ # Тестовые мероприятия
|
|
|
+ @testEvents = [
|
|
|
+ {
|
|
|
+ _id: 'event_classical_001'
|
|
|
+ title: 'Концерт симфонического оркестра'
|
|
|
+ date: '2025-10-15'
|
|
|
+ time: '19:00'
|
|
|
+ description: 'Произведения Чайковского и Рахманинова в исполнении Национального симфонического оркестра под руководством маэстро Фирдавса Абдурахмонова. Незабываемый вечер классической музыки в акустике мирового уровня.'
|
|
|
+ shortDescription: 'Шедевры классической музыки в исполнении Национального симфонического оркестра'
|
|
|
+ image: '/images/event-classical.jpg'
|
|
|
+ category: 'classical'
|
|
|
+ price: 50
|
|
|
+ venue: 'Большой зал'
|
|
|
+ duration: '2 часа 30 минут'
|
|
|
+ ageRestriction: '12+'
|
|
|
+ availableTickets: 45
|
|
|
+ isFeatured: true
|
|
|
+ inSlider: true
|
|
|
+ cta: 'Купить билеты'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_folk_001'
|
|
|
+ title: 'Вечер таджикской народной музыки'
|
|
|
+ date: '2025-10-20'
|
|
|
+ time: '18:30'
|
|
|
+ description: 'Выступление фольклорного ансамбля "Шашмаком" с программой традиционных мелодий и танцев. Погрузитесь в богатую культурную традицию Таджикистана через музыку, песни и танцы.'
|
|
|
+ shortDescription: 'Традиционные мелодии и танцы Таджикистана'
|
|
|
+ image: '/images/event-folk.jpg'
|
|
|
+ category: 'folk'
|
|
|
+ price: 30
|
|
|
+ venue: 'Малый зал'
|
|
|
+ duration: '2 часа'
|
|
|
+ ageRestriction: '6+'
|
|
|
+ availableTickets: 28
|
|
|
+ isFeatured: true
|
|
|
+ inSlider: true
|
|
|
+ cta: 'Узнать больше'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_jazz_001'
|
|
|
+ title: 'Джазовый фестиваль "Borbad Jazz"'
|
|
|
+ date: '2025-10-25'
|
|
|
+ time: '20:00'
|
|
|
+ description: 'Международные джазовые коллективы из Европы и Азии в уникальной акустике зала. Три дня незабываемой музыки от лучших джазменов мира. От традиционного джаза до современных экспериментов.'
|
|
|
+ shortDescription: 'Международные джазовые коллективы'
|
|
|
+ image: '/images/event-jazz.jpg'
|
|
|
+ category: 'jazz'
|
|
|
+ price: 70
|
|
|
+ venue: 'Большой зал'
|
|
|
+ duration: '3 часа'
|
|
|
+ ageRestriction: '16+'
|
|
|
+ availableTickets: 15
|
|
|
+ isFeatured: true
|
|
|
+ inSlider: true
|
|
|
+ cta: 'Смотреть расписание'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_pop_001'
|
|
|
+ title: 'Концерт популярной музыки'
|
|
|
+ date: '2025-10-28'
|
|
|
+ time: '19:30'
|
|
|
+ description: 'Лучшие поп-исполнители Таджикистана представят новые хиты и классические композиции. Энергичное шоу с современной хореографией и световыми эффектами.'
|
|
|
+ shortDescription: 'Лучшие поп-исполнители страны'
|
|
|
+ image: '/images/event-pop.jpg'
|
|
|
+ category: 'pop'
|
|
|
+ price: 45
|
|
|
+ venue: 'Большой зал'
|
|
|
+ duration: '2 часа 15 минут'
|
|
|
+ ageRestriction: '12+'
|
|
|
+ availableTickets: 67
|
|
|
+ isFeatured: true
|
|
|
+ inSlider: false
|
|
|
+ cta: 'Купить билеты'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_opera_001'
|
|
|
+ title: 'Оперный гала-концерт'
|
|
|
+ date: '2025-11-02'
|
|
|
+ time: '18:00'
|
|
|
+ description: 'Известные оперные певцы исполнят арии из мировых шедевров оперного искусства. Вечер великой музыки в исполнении мастеров оперной сцены.'
|
|
|
+ shortDescription: 'Арии из мировых оперных шедевров'
|
|
|
+ image: '/images/event-opera.jpg'
|
|
|
+ category: 'classical'
|
|
|
+ price: 80
|
|
|
+ venue: 'Большой зал'
|
|
|
+ duration: '2 часа 45 минут'
|
|
|
+ ageRestriction: '12+'
|
|
|
+ availableTickets: 23
|
|
|
+ isFeatured: false
|
|
|
+ inSlider: false
|
|
|
+ cta: 'Забронировать места'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_dance_001'
|
|
|
+ title: 'Танцевальное шоу "Восточные ритмы"'
|
|
|
+ date: '2025-11-05'
|
|
|
+ time: '19:00'
|
|
|
+ description: 'Традиционные и современные танцевальные коллективы представят красочное шоу. Яркие костюмы, зажигательная музыка и мастерство танцовщиков со всего Таджикистана.'
|
|
|
+ shortDescription: 'Традиционные и современные танцы'
|
|
|
+ image: '/images/event-dance.jpg'
|
|
|
+ category: 'dance'
|
|
|
+ price: 35
|
|
|
+ venue: 'Большой зал'
|
|
|
+ duration: '2 часа 30 минут'
|
|
|
+ ageRestriction: '6+'
|
|
|
+ availableTickets: 89
|
|
|
+ isFeatured: true
|
|
|
+ inSlider: true
|
|
|
+ cta: 'Посмотреть программу'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_chamber_001'
|
|
|
+ title: 'Камерная музыка: Струнный квартет'
|
|
|
+ date: '2025-11-08'
|
|
|
+ time: '17:00'
|
|
|
+ description: 'Изысканная программа камерной музыки в исполнении ведущего струнного квартета страны. Интимная атмосфера и тонкое звучание в акустике камерного зала.'
|
|
|
+ shortDescription: 'Изысканная камерная музыка'
|
|
|
+ image: '/images/event-chamber.jpg'
|
|
|
+ category: 'classical'
|
|
|
+ price: 40
|
|
|
+ venue: 'Камерный зал'
|
|
|
+ duration: '1 час 45 минут'
|
|
|
+ ageRestriction: '12+'
|
|
|
+ availableTickets: 34
|
|
|
+ isFeatured: false
|
|
|
+ inSlider: false
|
|
|
+ cta: 'Приобрести билеты'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ _id: 'event_experimental_001'
|
|
|
+ title: 'Фестиваль современной музыки'
|
|
|
+ date: '2025-11-12'
|
|
|
+ time: '20:30'
|
|
|
+ description: 'Экспериментальные проекты и инновационные музыкальные направления. Откройте для себя новые грани музыкального искусства от молодых композиторов и исполнителей.'
|
|
|
+ shortDescription: 'Экспериментальные музыкальные проекты'
|
|
|
+ image: '/images/event-modern.jpg'
|
|
|
+ category: 'experimental'
|
|
|
+ price: 55
|
|
|
+ venue: 'Малый зал'
|
|
|
+ duration: '3 часа'
|
|
|
+ ageRestriction: '18+'
|
|
|
+ availableTickets: 18
|
|
|
+ isFeatured: false
|
|
|
+ inSlider: true
|
|
|
+ cta: 'Исследовать программу'
|
|
|
+ createdAt: new Date().toISOString()
|
|
|
+ updatedAt: new Date().toISOString()
|
|
|
+ }
|
|
|
+ ]
|
|
|
+
|
|
|
+ # Проверить существование базы данных
|
|
|
+ checkDatabase: ->
|
|
|
+ try
|
|
|
+ response = await fetch("#{@baseUrl}/#{@dbName}", {
|
|
|
+ method: 'GET'
|
|
|
+ headers: @headers
|
|
|
+ })
|
|
|
+
|
|
|
+ if response.ok
|
|
|
+ console.log '✅ База данных существует'
|
|
|
+ return true
|
|
|
+ else if response.status == 404
|
|
|
+ console.log '📁 База данных не существует, создаем...'
|
|
|
+ return await this.createDatabase()
|
|
|
+ else
|
|
|
+ console.error '❌ Ошибка проверки базы данных:', response.statusText
|
|
|
+ return false
|
|
|
+ catch error
|
|
|
+ console.error '❌ Ошибка подключения к CouchDB:', error.message
|
|
|
+ return false
|
|
|
+
|
|
|
+ # Создать базу данных
|
|
|
+ createDatabase: ->
|
|
|
+ try
|
|
|
+ response = await fetch("#{@baseUrl}/#{@dbName}", {
|
|
|
+ method: 'PUT'
|
|
|
+ headers: @headers
|
|
|
+ })
|
|
|
+
|
|
|
+ if response.ok
|
|
|
+ console.log '✅ База данных создана успешно'
|
|
|
+ return true
|
|
|
+ else
|
|
|
+ console.error '❌ Ошибка создания базы данных:', response.statusText
|
|
|
+ return false
|
|
|
+ catch error
|
|
|
+ console.error '❌ Ошибка создания базы данных:', error.message
|
|
|
+ return false
|
|
|
+
|
|
|
+ # Добавить мероприятие
|
|
|
+ addEvent: (event) ->
|
|
|
+ try
|
|
|
+ response = await fetch("#{@baseUrl}/#{@dbName}/#{event._id}", {
|
|
|
+ method: 'PUT'
|
|
|
+ headers: @headers
|
|
|
+ body: JSON.stringify(event)
|
|
|
+ })
|
|
|
+
|
|
|
+ if response.ok
|
|
|
+ result = await response.json()
|
|
|
+ console.log "✅ Мероприятие добавлено: #{event.title}"
|
|
|
+ return { success: true, id: result.id }
|
|
|
+ else
|
|
|
+ console.error "❌ Ошибка добавления мероприятия #{event.title}:", response.statusText
|
|
|
+ return { success: false, error: response.statusText }
|
|
|
+ catch error
|
|
|
+ console.error "❌ Ошибка добавления мероприятия #{event.title}:", error.message
|
|
|
+ return { success: false, error: error.message }
|
|
|
+
|
|
|
+ # Основная функция заполнения базы
|
|
|
+ seed: ->
|
|
|
+ console.log '🎭 Начало заполнения базы данных мероприятиями...'
|
|
|
+
|
|
|
+ # Проверяем базу данных
|
|
|
+ databaseExists = await this.checkDatabase()
|
|
|
+ if not databaseExists
|
|
|
+ console.log '❌ Не удалось подключиться к базе данных'
|
|
|
+ process.exit(1)
|
|
|
+
|
|
|
+ # Добавляем мероприятия
|
|
|
+ successCount = 0
|
|
|
+ for event in @testEvents
|
|
|
+ result = await this.addEvent(event)
|
|
|
+ if result.success
|
|
|
+ successCount += 1
|
|
|
+ # Небольшая задержка между запросами
|
|
|
+ await new Promise (resolve) -> setTimeout resolve, 100
|
|
|
+
|
|
|
+ console.log "\n🎉 Заполнение завершено!"
|
|
|
+ console.log "✅ Успешно добавлено: #{successCount} из #{@testEvents.length} мероприятий"
|
|
|
+
|
|
|
+ if successCount == @testEvents.length
|
|
|
+ console.log '🎊 Все мероприятия успешно добавлены в базу данных!'
|
|
|
+ else
|
|
|
+ console.log '⚠️ Некоторые мероприятия не были добавлены'
|
|
|
+
|
|
|
+# Запуск скрипта
|
|
|
+seeder = new EventSeeder()
|
|
|
+seeder.seed().then ->
|
|
|
+ console.log '\n✨ Скрипт завершил работу'
|
|
|
+ process.exit(0)
|
|
|
+.catch (error) ->
|
|
|
+ console.error '\n💥 Критическая ошибка:', error
|
|
|
+ process.exit(1)
|