#!/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)