seed-events.coffee 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #!/usr/bin/env coffee
  2. # Скрипт для добавления тестовых мероприятий в CouchDB
  3. class EventSeeder
  4. constructor: ->
  5. @baseUrl = 'http://localhost:5984'
  6. @dbName = 'kohi_borbad_events'
  7. @headers =
  8. 'Content-Type': 'application/json'
  9. 'Authorization': 'Basic ' + Buffer.from('oleg:631074').toString('base64')
  10. # Тестовые мероприятия
  11. @testEvents = [
  12. {
  13. _id: 'event_classical_001'
  14. title: 'Концерт симфонического оркестра'
  15. date: '2025-10-15'
  16. time: '19:00'
  17. description: 'Произведения Чайковского и Рахманинова в исполнении Национального симфонического оркестра под руководством маэстро Фирдавса Абдурахмонова. Незабываемый вечер классической музыки в акустике мирового уровня.'
  18. shortDescription: 'Шедевры классической музыки в исполнении Национального симфонического оркестра'
  19. image: '/images/event-classical.jpg'
  20. category: 'classical'
  21. price: 50
  22. venue: 'Большой зал'
  23. duration: '2 часа 30 минут'
  24. ageRestriction: '12+'
  25. availableTickets: 45
  26. isFeatured: true
  27. inSlider: true
  28. cta: 'Купить билеты'
  29. createdAt: new Date().toISOString()
  30. updatedAt: new Date().toISOString()
  31. }
  32. {
  33. _id: 'event_folk_001'
  34. title: 'Вечер таджикской народной музыки'
  35. date: '2025-10-20'
  36. time: '18:30'
  37. description: 'Выступление фольклорного ансамбля "Шашмаком" с программой традиционных мелодий и танцев. Погрузитесь в богатую культурную традицию Таджикистана через музыку, песни и танцы.'
  38. shortDescription: 'Традиционные мелодии и танцы Таджикистана'
  39. image: '/images/event-folk.jpg'
  40. category: 'folk'
  41. price: 30
  42. venue: 'Малый зал'
  43. duration: '2 часа'
  44. ageRestriction: '6+'
  45. availableTickets: 28
  46. isFeatured: true
  47. inSlider: true
  48. cta: 'Узнать больше'
  49. createdAt: new Date().toISOString()
  50. updatedAt: new Date().toISOString()
  51. }
  52. {
  53. _id: 'event_jazz_001'
  54. title: 'Джазовый фестиваль "Borbad Jazz"'
  55. date: '2025-10-25'
  56. time: '20:00'
  57. description: 'Международные джазовые коллективы из Европы и Азии в уникальной акустике зала. Три дня незабываемой музыки от лучших джазменов мира. От традиционного джаза до современных экспериментов.'
  58. shortDescription: 'Международные джазовые коллективы'
  59. image: '/images/event-jazz.jpg'
  60. category: 'jazz'
  61. price: 70
  62. venue: 'Большой зал'
  63. duration: '3 часа'
  64. ageRestriction: '16+'
  65. availableTickets: 15
  66. isFeatured: true
  67. inSlider: true
  68. cta: 'Смотреть расписание'
  69. createdAt: new Date().toISOString()
  70. updatedAt: new Date().toISOString()
  71. }
  72. {
  73. _id: 'event_pop_001'
  74. title: 'Концерт популярной музыки'
  75. date: '2025-10-28'
  76. time: '19:30'
  77. description: 'Лучшие поп-исполнители Таджикистана представят новые хиты и классические композиции. Энергичное шоу с современной хореографией и световыми эффектами.'
  78. shortDescription: 'Лучшие поп-исполнители страны'
  79. image: '/images/event-pop.jpg'
  80. category: 'pop'
  81. price: 45
  82. venue: 'Большой зал'
  83. duration: '2 часа 15 минут'
  84. ageRestriction: '12+'
  85. availableTickets: 67
  86. isFeatured: true
  87. inSlider: false
  88. cta: 'Купить билеты'
  89. createdAt: new Date().toISOString()
  90. updatedAt: new Date().toISOString()
  91. }
  92. {
  93. _id: 'event_opera_001'
  94. title: 'Оперный гала-концерт'
  95. date: '2025-11-02'
  96. time: '18:00'
  97. description: 'Известные оперные певцы исполнят арии из мировых шедевров оперного искусства. Вечер великой музыки в исполнении мастеров оперной сцены.'
  98. shortDescription: 'Арии из мировых оперных шедевров'
  99. image: '/images/event-opera.jpg'
  100. category: 'classical'
  101. price: 80
  102. venue: 'Большой зал'
  103. duration: '2 часа 45 минут'
  104. ageRestriction: '12+'
  105. availableTickets: 23
  106. isFeatured: false
  107. inSlider: false
  108. cta: 'Забронировать места'
  109. createdAt: new Date().toISOString()
  110. updatedAt: new Date().toISOString()
  111. }
  112. {
  113. _id: 'event_dance_001'
  114. title: 'Танцевальное шоу "Восточные ритмы"'
  115. date: '2025-11-05'
  116. time: '19:00'
  117. description: 'Традиционные и современные танцевальные коллективы представят красочное шоу. Яркие костюмы, зажигательная музыка и мастерство танцовщиков со всего Таджикистана.'
  118. shortDescription: 'Традиционные и современные танцы'
  119. image: '/images/event-dance.jpg'
  120. category: 'dance'
  121. price: 35
  122. venue: 'Большой зал'
  123. duration: '2 часа 30 минут'
  124. ageRestriction: '6+'
  125. availableTickets: 89
  126. isFeatured: true
  127. inSlider: true
  128. cta: 'Посмотреть программу'
  129. createdAt: new Date().toISOString()
  130. updatedAt: new Date().toISOString()
  131. }
  132. {
  133. _id: 'event_chamber_001'
  134. title: 'Камерная музыка: Струнный квартет'
  135. date: '2025-11-08'
  136. time: '17:00'
  137. description: 'Изысканная программа камерной музыки в исполнении ведущего струнного квартета страны. Интимная атмосфера и тонкое звучание в акустике камерного зала.'
  138. shortDescription: 'Изысканная камерная музыка'
  139. image: '/images/event-chamber.jpg'
  140. category: 'classical'
  141. price: 40
  142. venue: 'Камерный зал'
  143. duration: '1 час 45 минут'
  144. ageRestriction: '12+'
  145. availableTickets: 34
  146. isFeatured: false
  147. inSlider: false
  148. cta: 'Приобрести билеты'
  149. createdAt: new Date().toISOString()
  150. updatedAt: new Date().toISOString()
  151. }
  152. {
  153. _id: 'event_experimental_001'
  154. title: 'Фестиваль современной музыки'
  155. date: '2025-11-12'
  156. time: '20:30'
  157. description: 'Экспериментальные проекты и инновационные музыкальные направления. Откройте для себя новые грани музыкального искусства от молодых композиторов и исполнителей.'
  158. shortDescription: 'Экспериментальные музыкальные проекты'
  159. image: '/images/event-modern.jpg'
  160. category: 'experimental'
  161. price: 55
  162. venue: 'Малый зал'
  163. duration: '3 часа'
  164. ageRestriction: '18+'
  165. availableTickets: 18
  166. isFeatured: false
  167. inSlider: true
  168. cta: 'Исследовать программу'
  169. createdAt: new Date().toISOString()
  170. updatedAt: new Date().toISOString()
  171. }
  172. ]
  173. # Проверить существование базы данных
  174. checkDatabase: ->
  175. try
  176. response = await fetch("#{@baseUrl}/#{@dbName}", {
  177. method: 'GET'
  178. headers: @headers
  179. })
  180. if response.ok
  181. console.log '✅ База данных существует'
  182. return true
  183. else if response.status == 404
  184. console.log '📁 База данных не существует, создаем...'
  185. return await this.createDatabase()
  186. else
  187. console.error '❌ Ошибка проверки базы данных:', response.statusText
  188. return false
  189. catch error
  190. console.error '❌ Ошибка подключения к CouchDB:', error.message
  191. return false
  192. # Создать базу данных
  193. createDatabase: ->
  194. try
  195. response = await fetch("#{@baseUrl}/#{@dbName}", {
  196. method: 'PUT'
  197. headers: @headers
  198. })
  199. if response.ok
  200. console.log '✅ База данных создана успешно'
  201. return true
  202. else
  203. console.error '❌ Ошибка создания базы данных:', response.statusText
  204. return false
  205. catch error
  206. console.error '❌ Ошибка создания базы данных:', error.message
  207. return false
  208. # Добавить мероприятие
  209. addEvent: (event) ->
  210. try
  211. response = await fetch("#{@baseUrl}/#{@dbName}/#{event._id}", {
  212. method: 'PUT'
  213. headers: @headers
  214. body: JSON.stringify(event)
  215. })
  216. if response.ok
  217. result = await response.json()
  218. console.log "✅ Мероприятие добавлено: #{event.title}"
  219. return { success: true, id: result.id }
  220. else
  221. console.error "❌ Ошибка добавления мероприятия #{event.title}:", response.statusText
  222. return { success: false, error: response.statusText }
  223. catch error
  224. console.error "❌ Ошибка добавления мероприятия #{event.title}:", error.message
  225. return { success: false, error: error.message }
  226. # Основная функция заполнения базы
  227. seed: ->
  228. console.log '🎭 Начало заполнения базы данных мероприятиями...'
  229. # Проверяем базу данных
  230. databaseExists = await this.checkDatabase()
  231. if not databaseExists
  232. console.log '❌ Не удалось подключиться к базе данных'
  233. process.exit(1)
  234. # Добавляем мероприятия
  235. successCount = 0
  236. for event in @testEvents
  237. result = await this.addEvent(event)
  238. if result.success
  239. successCount += 1
  240. # Небольшая задержка между запросами
  241. await new Promise (resolve) -> setTimeout resolve, 100
  242. console.log "\n🎉 Заполнение завершено!"
  243. console.log "✅ Успешно добавлено: #{successCount} из #{@testEvents.length} мероприятий"
  244. if successCount == @testEvents.length
  245. console.log '🎊 Все мероприятия успешно добавлены в базу данных!'
  246. else
  247. console.log '⚠️ Некоторые мероприятия не были добавлены'
  248. # Запуск скрипта
  249. seeder = new EventSeeder()
  250. seeder.seed().then ->
  251. console.log '\n✨ Скрипт завершил работу'
  252. process.exit(0)
  253. .catch (error) ->
  254. console.error '\n💥 Критическая ошибка:', error
  255. process.exit(1)