seed-events.coffee 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. # Подключение PouchDB
  2. PouchDB = require 'pouchdb'
  3. # Важно сохранять для seed-events.coffee
  4. debug = require('../../../utils/coffee/debug.coffee').default
  5. class DatabaseSeeder
  6. constructor: (dbName, baseUrl = 'http://oleg:631074@localhost:5984') ->
  7. @dbName = dbName
  8. @baseUrl = baseUrl
  9. @db = new PouchDB(@baseUrl+"/"+@dbName)
  10. @designDoc = require './design-documents.coffee'
  11. @orderCounter = 0
  12. @currentYear = new Date().getFullYear()
  13. # Генератор ID для категорий
  14. generateCategoryId: (name, parentId = null, domain = null) ->
  15. slug = name
  16. .toLowerCase()
  17. .replace(/[^a-z0-9а-яё]/g, '_')
  18. .replace(/_+/g, '_')
  19. .replace(/^_|_$/g, '')
  20. id = "category_"+slug
  21. if parentId
  22. parentSlug = parentId.replace(/^category_/, '')
  23. id += "_"+parentSlug
  24. if domain
  25. domainPart = domain.replace(/\./g, '_')
  26. id += "_"+domainPart
  27. return id
  28. # Генератор ID для заказов
  29. generateOrderId: ->
  30. @orderCounter++
  31. return "order_"+@currentYear+"_"+@orderCounter.toString().padStart(3, '0')
  32. # Генератор ID для блог постов
  33. generateBlogPostId: (title, domain = null) ->
  34. slug = title
  35. .toLowerCase()
  36. .replace(/[^a-z0-9а-яё]/g, '_')
  37. .replace(/_+/g, '_')
  38. .replace(/^_|_$/g, '')
  39. year = new Date().getFullYear()
  40. id = "blog_post_"+slug+"_"+year
  41. if domain
  42. domainPart = domain.replace(/\./g, '_')
  43. id += "_"+domainPart
  44. return id
  45. # Генератор ID для мероприятий
  46. generateEventId: (title, eventDate, domain = null) ->
  47. slug = title
  48. .toLowerCase()
  49. .replace(/[^a-z0-9а-яё]/g, '_')
  50. .replace(/_+/g, '_')
  51. .replace(/^_|_$/g, '')
  52. date = new Date(eventDate)
  53. year = date.getFullYear()
  54. month = (date.getMonth() + 1).toString().padStart(2, '0')
  55. id = "event_"+slug+"_"+year+"_"+month
  56. if domain
  57. domainPart = domain.replace(/\./g, '_')
  58. id += "_"+domainPart
  59. return id
  60. # Проверка существования базы данных
  61. checkDatabaseExists: ->
  62. try
  63. info = await @db.info()
  64. debug.log "База данных "+@dbName+" существует"
  65. return true
  66. catch error
  67. debug.log "База данных "+@dbName+" не существует: "+error
  68. return false
  69. # Создание базы данных если не существует
  70. createDatabaseIfNotExists: ->
  71. exists = await @checkDatabaseExists()
  72. if not exists
  73. try
  74. response = await fetch(@baseUrl+"/"+@dbName, method: 'PUT')
  75. if response.ok
  76. debug.log "База данных "+@dbName+" создана"
  77. else
  78. debug.log "Ошибка создания базы: "+response.statusText
  79. catch error
  80. debug.log "Ошибка при создании базы: "+error
  81. return exists
  82. # Удаление старых версий документов
  83. cleanupOldDocuments: ->
  84. try
  85. debug.log "Начало очистки старых документов"
  86. allDocs = await @db.allDocs(include_docs: true)
  87. documentsToDelete = []
  88. documentsToKeep = new Set()
  89. documentsByType = {}
  90. for row in allDocs.rows
  91. doc = row.doc
  92. if doc._id.startsWith('_design/')
  93. continue
  94. docType = doc.type or 'unknown'
  95. if not documentsByType[docType]
  96. documentsByType[docType] = []
  97. documentsByType[docType].push(doc)
  98. for docType, docs of documentsByType
  99. if docs.length <= 6
  100. for doc in docs
  101. documentsToKeep.add(doc._id)
  102. continue
  103. sortedDocs = docs.sort (a, b) ->
  104. new Date(b.created_at) - new Date(a.created_at)
  105. for doc, index in sortedDocs
  106. if index < 6
  107. documentsToKeep.add(doc._id)
  108. else
  109. documentsToDelete.push({
  110. _id: doc._id
  111. _rev: doc._rev
  112. _deleted: true
  113. })
  114. if documentsToDelete.length > 0
  115. result = await @db.bulkDocs(documentsToDelete)
  116. debug.log "Удалено старых документов: "+documentsToDelete.length
  117. else
  118. debug.log "Старые документы для удаления не найдены"
  119. debug.log "Очистка старых документов завершена"
  120. catch error
  121. debug.log "Ошибка при очистке старых документов: "+error
  122. # Проверка и создание design документов
  123. setupDesignDocuments: ->
  124. try
  125. for designName, designDoc of @designDoc
  126. docId = "_design/"+designName
  127. try
  128. currentDoc = await @db.get(docId)
  129. if currentDoc.version isnt designDoc.version
  130. debug.log "Обновление design документа: "+designName
  131. designDoc._id = docId
  132. designDoc._rev = currentDoc._rev
  133. await @db.put(designDoc)
  134. debug.log "Design документ "+designName+" обновлен до версии "+designDoc.version
  135. else
  136. debug.log "Design документ "+designName+" актуален"
  137. catch error
  138. if error.status is 404
  139. debug.log "Создание design документа: "+designName
  140. designDoc._id = docId
  141. await @db.put(designDoc)
  142. debug.log "Design документ "+designName+" создан"
  143. else
  144. throw error
  145. catch error
  146. debug.log "Ошибка при настройке design документов: "+error
  147. # Создание иерархической структуры категорий
  148. createCategoryHierarchy: ->
  149. categories = [
  150. # Корневые категории
  151. {
  152. _id: @generateCategoryId("Мероприятия", null, "borbad")
  153. type: "category"
  154. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  155. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  156. language: "ru"
  157. name: "Мероприятия"
  158. slug: "events"
  159. description: "Все мероприятия концертного зала"
  160. image: "/assets/borbad.s5l.ru/categories/events.jpg"
  161. icon: "calendar"
  162. parent_id: null
  163. parent_path: [] # Путь от корня
  164. level: 0 # Уровень в иерархии (0 - корень)
  165. order: 1
  166. children_count: 4
  167. meta_title: "Мероприятия - Кохи Борбад"
  168. meta_description: "Концерты, выставки и другие мероприятия в концертном зале Борбад"
  169. active: true
  170. featured: true
  171. show_in_menu: true
  172. menu_order: 1
  173. color: "#3B82F6"
  174. created_at: new Date().toISOString()
  175. updated_at: new Date().toISOString()
  176. }
  177. {
  178. _id: @generateCategoryId("Новости", null, "borbad")
  179. type: "category"
  180. domain: ["borbad.s5l.ru"]
  181. domain_priority: ["borbad.s5l.ru"]
  182. language: "ru"
  183. name: "Новости"
  184. slug: "news"
  185. description: "Новости и анонсы концертного зала"
  186. image: "/assets/borbad.s5l.ru/categories/news.jpg"
  187. icon: "news"
  188. parent_id: null
  189. parent_path: []
  190. level: 0
  191. order: 2
  192. children_count: 0
  193. meta_title: "Новости - Кохи Борбад"
  194. meta_description: "Последние новости и анонсы концертного зала Борбад"
  195. active: true
  196. featured: false
  197. show_in_menu: true
  198. menu_order: 2
  199. color: "#10B981"
  200. created_at: new Date().toISOString()
  201. updated_at: new Date().toISOString()
  202. }
  203. {
  204. _id: @generateCategoryId("Образование", null, "borbad")
  205. type: "category"
  206. domain: ["borbad.s5l.ru"]
  207. domain_priority: ["borbad.s5l.ru"]
  208. language: "ru"
  209. name: "Образование"
  210. slug: "education"
  211. description: "Образовательные программы и мастер-классы"
  212. image: "/assets/borbad.s5l.ru/categories/education.jpg"
  213. icon: "graduation"
  214. parent_id: null
  215. parent_path: []
  216. level: 0
  217. order: 3
  218. children_count: 3
  219. meta_title: "Образовательные программы - Кохи Борбад"
  220. meta_description: "Мастер-классы, лекции и образовательные программы"
  221. active: true
  222. featured: false
  223. show_in_menu: true
  224. menu_order: 3
  225. color: "#F59E0B"
  226. created_at: new Date().toISOString()
  227. updated_at: new Date().toISOString()
  228. }
  229. # Подкатегории для "Мероприятия"
  230. {
  231. _id: @generateCategoryId("Концерты", "category_events_borbad", "borbad")
  232. type: "category"
  233. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  234. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  235. language: "ru"
  236. name: "Концерты"
  237. slug: "concerts"
  238. description: "Музыкальные концерты различных жанров"
  239. image: "/assets/borbad.s5l.ru/categories/concerts.jpg"
  240. icon: "music"
  241. parent_id: "category_events_borbad"
  242. parent_path: ["category_events_borbad"]
  243. level: 1
  244. order: 1
  245. children_count: 3
  246. meta_title: "Концерты - Кохи Борбад"
  247. meta_description: "Музыкальные концерты в концертном зале Борбад"
  248. active: true
  249. featured: true
  250. show_in_menu: true
  251. menu_order: 1
  252. color: "#6366F1"
  253. created_at: new Date().toISOString()
  254. updated_at: new Date().toISOString()
  255. }
  256. {
  257. _id: @generateCategoryId("Выставки", "category_events_borbad", "borbad")
  258. type: "category"
  259. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  260. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  261. language: "ru"
  262. name: "Выставки"
  263. slug: "exhibitions"
  264. description: "Художественные выставки и вернисажи"
  265. image: "/assets/borbad.s5l.ru/categories/exhibitions.jpg"
  266. icon: "palette"
  267. parent_id: "category_events_borbad"
  268. parent_path: ["category_events_borbad"]
  269. level: 1
  270. order: 2
  271. children_count: 0
  272. meta_title: "Выставки - Кохи Борбад"
  273. meta_description: "Художественные выставки в галерее Борбад"
  274. active: true
  275. featured: false
  276. show_in_menu: true
  277. menu_order: 2
  278. color: "#EC4899"
  279. created_at: new Date().toISOString()
  280. updated_at: new Date().toISOString()
  281. }
  282. {
  283. _id: @generateCategoryId("Театр", "category_events_borbad", "borbad")
  284. type: "category"
  285. domain: ["borbad.s5l.ru"]
  286. domain_priority: ["borbad.s5l.ru"]
  287. language: "ru"
  288. name: "Театр"
  289. slug: "theater"
  290. description: "Театральные постановки и спектакли"
  291. image: "/assets/borbad.s5l.ru/categories/theater.jpg"
  292. icon: "drama"
  293. parent_id: "category_events_borbad"
  294. parent_path: ["category_events_borbad"]
  295. level: 1
  296. order: 3
  297. children_count: 0
  298. meta_title: "Театральные постановки - Кохи Борбад"
  299. meta_description: "Спектакли и театральные представления"
  300. active: true
  301. featured: false
  302. show_in_menu: true
  303. menu_order: 3
  304. color: "#8B5CF6"
  305. created_at: new Date().toISOString()
  306. updated_at: new Date().toISOString()
  307. }
  308. {
  309. _id: @generateCategoryId("Фестивали", "category_events_borbad", "borbad")
  310. type: "category"
  311. domain: ["borbad.s5l.ru"]
  312. domain_priority: ["borbad.s5l.ru"]
  313. language: "ru"
  314. name: "Фестивали"
  315. slug: "festivals"
  316. description: "Музыкальные и культурные фестивали"
  317. image: "/assets/borbad.s5l.ru/categories/festivals.jpg"
  318. icon: "festival"
  319. parent_id: "category_events_borbad"
  320. parent_path: ["category_events_borbad"]
  321. level: 1
  322. order: 4
  323. children_count: 0
  324. meta_title: "Фестивали - Кохи Борбад"
  325. meta_description: "Культурные и музыкальные фестивали"
  326. active: true
  327. featured: false
  328. show_in_menu: true
  329. menu_order: 4
  330. color: "#F59E0B"
  331. created_at: new Date().toISOString()
  332. updated_at: new Date().toISOString()
  333. }
  334. # Подкатегории для "Концерты"
  335. {
  336. _id: @generateCategoryId("Классическая музыка", "category_concerts_events_borbad", "borbad")
  337. type: "category"
  338. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  339. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  340. language: "ru"
  341. name: "Классическая музыка"
  342. slug: "classical-music"
  343. description: "Симфонические концерты и классические произведения"
  344. image: "/assets/borbad.s5l.ru/categories/classical-music.jpg"
  345. icon: "classical"
  346. parent_id: "category_concerts_events_borbad"
  347. parent_path: ["category_events_borbad", "category_concerts_events_borbad"]
  348. level: 2
  349. order: 1
  350. children_count: 0
  351. meta_title: "Классическая музыка - Кохи Борбад"
  352. meta_description: "Симфонические концерты и классические произведения"
  353. active: true
  354. featured: true
  355. show_in_menu: true
  356. menu_order: 1
  357. color: "#3B82F6"
  358. created_at: new Date().toISOString()
  359. updated_at: new Date().toISOString()
  360. }
  361. {
  362. _id: @generateCategoryId("Джаз и блюз", "category_concerts_events_borbad", "borbad")
  363. type: "category"
  364. domain: ["borbad.s5l.ru"]
  365. domain_priority: ["borbad.s5l.ru"]
  366. language: "ru"
  367. name: "Джаз и блюз"
  368. slug: "jazz-blues"
  369. description: "Джазовые концерты и блюзовые вечера"
  370. image: "/assets/borbad.s5l.ru/categories/jazz-blues.jpg"
  371. icon: "jazz"
  372. parent_id: "category_concerts_events_borbad"
  373. parent_path: ["category_events_borbad", "category_concerts_events_borbad"]
  374. level: 2
  375. order: 2
  376. children_count: 0
  377. meta_title: "Джаз и блюз - Кохи Борбад"
  378. meta_description: "Джазовые концерты и блюзовые вечера"
  379. active: true
  380. featured: false
  381. show_in_menu: true
  382. menu_order: 2
  383. color: "#8B5CF6"
  384. created_at: new Date().toISOString()
  385. updated_at: new Date().toISOString()
  386. }
  387. {
  388. _id: @generateCategoryId("Народная музыка", "category_concerts_events_borbad", "borbad")
  389. type: "category"
  390. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  391. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  392. language: "ru"
  393. name: "Народная музыка"
  394. slug: "folk-music"
  395. description: "Концерты народной и традиционной музыки"
  396. image: "/assets/borbad.s5l.ru/categories/folk-music.jpg"
  397. icon: "folk"
  398. parent_id: "category_concerts_events_borbad"
  399. parent_path: ["category_events_borbad", "category_concerts_events_borbad"]
  400. level: 2
  401. order: 3
  402. children_count: 0
  403. meta_title: "Народная музыка - Кохи Борбад"
  404. meta_description: "Концерты народной и традиционной музыки"
  405. active: true
  406. featured: false
  407. show_in_menu: true
  408. menu_order: 3
  409. color: "#10B981"
  410. created_at: new Date().toISOString()
  411. updated_at: new Date().toISOString()
  412. }
  413. # Подкатегории для "Образование"
  414. {
  415. _id: @generateCategoryId("Мастер-классы", "category_education_borbad", "borbad")
  416. type: "category"
  417. domain: ["borbad.s5l.ru"]
  418. domain_priority: ["borbad.s5l.ru"]
  419. language: "ru"
  420. name: "Мастер-классы"
  421. slug: "workshops"
  422. description: "Практические занятия и мастер-классы"
  423. image: "/assets/borbad.s5l.ru/categories/workshops.jpg"
  424. icon: "workshop"
  425. parent_id: "category_education_borbad"
  426. parent_path: ["category_education_borbad"]
  427. level: 1
  428. order: 1
  429. children_count: 0
  430. meta_title: "Мастер-классы - Кохи Борбад"
  431. meta_description: "Практические занятия и мастер-классы"
  432. active: true
  433. featured: false
  434. show_in_menu: true
  435. menu_order: 1
  436. color: "#F59E0B"
  437. created_at: new Date().toISOString()
  438. updated_at: new Date().toISOString()
  439. }
  440. {
  441. _id: @generateCategoryId("Лекции", "category_education_borbad", "borbad")
  442. type: "category"
  443. domain: ["borbad.s5l.ru"]
  444. domain_priority: ["borbad.s5l.ru"]
  445. language: "ru"
  446. name: "Лекции"
  447. slug: "lectures"
  448. description: "Образовательные лекции и семинары"
  449. image: "/assets/borbad.s5l.ru/categories/lectures.jpg"
  450. icon: "lecture"
  451. parent_id: "category_education_borbad"
  452. parent_path: ["category_education_borbad"]
  453. level: 1
  454. order: 2
  455. children_count: 0
  456. meta_title: "Лекции - Кохи Борбад"
  457. meta_description: "Образовательные лекции и семинары"
  458. active: true
  459. featured: false
  460. show_in_menu: true
  461. menu_order: 2
  462. color: "#EF4444"
  463. created_at: new Date().toISOString()
  464. updated_at: new Date().toISOString()
  465. }
  466. {
  467. _id: @generateCategoryId("Детские программы", "category_education_borbad", "borbad")
  468. type: "category"
  469. domain: ["borbad.s5l.ru"]
  470. domain_priority: ["borbad.s5l.ru"]
  471. language: "ru"
  472. name: "Детские программы"
  473. slug: "children-programs"
  474. description: "Образовательные программы для детей"
  475. image: "/assets/borbad.s5l.ru/categories/children-programs.jpg"
  476. icon: "children"
  477. parent_id: "category_education_borbad"
  478. parent_path: ["category_education_borbad"]
  479. level: 1
  480. order: 3
  481. children_count: 0
  482. meta_title: "Детские программы - Кохи Борбад"
  483. meta_description: "Образовательные программы для детей"
  484. active: true
  485. featured: true
  486. show_in_menu: true
  487. menu_order: 3
  488. color: "#EC4899"
  489. created_at: new Date().toISOString()
  490. updated_at: new Date().toISOString()
  491. }
  492. ]
  493. return categories
  494. # Создание тестовых данных для сайта
  495. createSampleData: ->
  496. currentDate = new Date().toISOString()
  497. sampleData = [
  498. # Доменные настройки
  499. {
  500. _id: "domain_settings_borbad_s5l_ru"
  501. type: "domain_settings"
  502. domain: "borbad.s5l.ru"
  503. name: "Кохи Борбад - Концертный зал Душанбе"
  504. description: "Официальный сайт концертного зала Борбад"
  505. active: true
  506. priority: 1
  507. theme: "borbad"
  508. languages: ["ru", "en", "tj"]
  509. default_language: "ru"
  510. timezone: "Asia/Dushanbe"
  511. currency: "TJS"
  512. settings: {
  513. seo: {
  514. title_template: "{page} - Кохи Борбад"
  515. description: "Концертный зал Борбад - культурный центр Душанбе"
  516. keywords: ["концерты", "мероприятия", "Душанбе", "культура"]
  517. }
  518. social: {
  519. facebook: "https://facebook.com/borbad"
  520. instagram: "https://instagram.com/borbad"
  521. twitter: "https://twitter.com/borbad"
  522. }
  523. contact: {
  524. address: "г. Душанбе, пр. Рудаки 22"
  525. phone: "+992 37 123-45-67"
  526. email: "info@borbad.s5l.ru"
  527. }
  528. features: {
  529. online_booking: true
  530. multi_language: true
  531. ecommerce: true
  532. }
  533. }
  534. created_at: currentDate
  535. updated_at: currentDate
  536. }
  537. # Добавляем иерархические категории
  538. ...@createCategoryHierarchy()
  539. # Блог посты с привязкой к иерархическим категориям
  540. {
  541. _id: @generateBlogPostId("Открытие нового сезона 2024", "borbad")
  542. type: "blog_post"
  543. domain: ["borbad.s5l.ru", "global"]
  544. domain_priority: ["borbad.s5l.ru", "global"]
  545. language: "ru"
  546. translation_of: null
  547. translation_status: "original"
  548. title: "Открытие нового сезона 2024"
  549. content: "# Добро пожаловать в новый творческий сезон!\n\nМы рады объявить о начале нового сезона в концертном зале Борбад..."
  550. excerpt: "Новый творческий сезон 2024 года в концертном зале Борбад"
  551. image: "/assets/borbad.s5l.ru/posts/season-opening.jpg"
  552. tags: ["новости", "сезон", "анонс"]
  553. category_id: "category_news_borbad" # Привязка к категории новостей
  554. category_path: ["category_news_borbad"] # Полный путь категории
  555. author: "Администрация Борбад"
  556. status: "published"
  557. meta_title: "Открытие нового сезона 2024 - Кохи Борбад"
  558. meta_description: "Новый творческий сезон 2024 года в концертном зале Борбад в Душанбе"
  559. featured: true
  560. reading_time: 5
  561. created_at: currentDate
  562. updated_at: currentDate
  563. published_at: currentDate
  564. views: 156
  565. }
  566. # Мероприятия с привязкой к иерархическим категориям
  567. {
  568. _id: @generateEventId("Симфонический концерт: Бетховен и Чайковский", "2024-03-20T19:00:00.000Z", "borbad")
  569. type: "event"
  570. domain: ["borbad.s5l.ru", "concert-hall.tj"]
  571. domain_priority: ["borbad.s5l.ru", "concert-hall.tj"]
  572. language: "ru"
  573. translation_of: null
  574. translation_status: "original"
  575. title: "Симфонический концерт: Бетховен и Чайковский"
  576. content: "# Великие композиторы\n\n## Программа концерта\n\n- **Л. ван Бетховен** - Симфония №5..."
  577. event_date: "2024-03-20T19:00:00.000Z"
  578. end_date: "2024-03-20T21:00:00.000Z"
  579. location: "Большой зал"
  580. price: 500
  581. currency: "TJS"
  582. available_tickets: 45
  583. total_tickets: 300
  584. image: "/assets/borbad.s5l.ru/events/beethoven-concert.jpg"
  585. tags: ["концерт", "симфоническая музыка", "классика", "Бетховен", "Чайковский"]
  586. category_id: "category_classical_music_concerts_events_borbad" # Глубокая привязка
  587. category_path: ["category_events_borbad", "category_concerts_events_borbad", "category_classical_music_concerts_events_borbad"]
  588. status: "upcoming"
  589. registration_required: true
  590. created_at: currentDate
  591. updated_at: currentDate
  592. }
  593. {
  594. _id: @generateEventId("Джазовый вечер с Тимуром Якубовым", "2024-04-15T20:00:00.000Z", "borbad")
  595. type: "event"
  596. domain: ["borbad.s5l.ru"]
  597. domain_priority: ["borbad.s5l.ru"]
  598. language: "ru"
  599. title: "Джазовый вечер с Тимуром Якубовым"
  600. content: "# Современный джаз в Борбаде\n\n## О исполнителе\n\nТимур Якубов - известный джазовый пианист..."
  601. event_date: "2024-04-15T20:00:00.000Z"
  602. end_date: "2024-04-15T22:00:00.000Z"
  603. location: "Малый зал"
  604. price: 350
  605. currency: "TJS"
  606. available_tickets: 80
  607. total_tickets: 150
  608. image: "/assets/borbad.s5l.ru/events/jazz-evening.jpg"
  609. tags: ["джаз", "современная музыка", "импровизация"]
  610. category_id: "category_jazz_blues_concerts_events_borbad"
  611. category_path: ["category_events_borbad", "category_concerts_events_borbad", "category_jazz_blues_concerts_events_borbad"]
  612. status: "upcoming"
  613. registration_required: true
  614. created_at: currentDate
  615. updated_at: currentDate
  616. }
  617. # Мастер-класс с привязкой к образовательной категории
  618. {
  619. _id: @generateEventId("Мастер-класс: Основы вокала", "2024-03-25T15:00:00.000Z", "borbad")
  620. type: "event"
  621. domain: ["borbad.s5l.ru"]
  622. domain_priority: ["borbad.s5l.ru"]
  623. language: "ru"
  624. title: "Мастер-класс: Основы вокала"
  625. content: "# Искусство пения для начинающих\n\n## О ведущем\n\nОперный певец Шариф Мухтаров..."
  626. event_date: "2024-03-25T15:00:00.000Z"
  627. end_date: "2024-03-25T18:00:00.000Z"
  628. location: "Репетиционный зал"
  629. price: 200
  630. currency: "TJS"
  631. available_tickets: 15
  632. total_tickets: 20
  633. image: "/assets/borbad.s5l.ru/events/vocal-workshop.jpg"
  634. tags: ["мастер-класс", "вокал", "образование", "музыка"]
  635. category_id: "category_workshops_education_borbad"
  636. category_path: ["category_education_borbad", "category_workshops_education_borbad"]
  637. status: "upcoming"
  638. registration_required: true
  639. created_at: currentDate
  640. updated_at: currentDate
  641. }
  642. # Детская программа
  643. {
  644. _id: @generateEventId("Детская программа: Музыкальная сказка", "2024-04-10T11:00:00.000Z", "borbad")
  645. type: "event"
  646. domain: ["borbad.s5l.ru"]
  647. domain_priority: ["borbad.s5l.ru"]
  648. language: "ru"
  649. title: "Детская программа: Музыкальная сказка"
  650. content: "# Волшебный мир музыки для детей\n\n## Новая постановка\n\nТеатральная студия Борбад представляет..."
  651. event_date: "2024-04-10T11:00:00.000Z"
  652. end_date: "2024-04-10T12:00:00.000Z"
  653. location: "Детский зал"
  654. price: 100
  655. currency: "TJS"
  656. available_tickets: 95
  657. total_tickets: 100
  658. image: "/assets/borbad.s5l.ru/events/children-play.jpg"
  659. tags: ["дети", "театр", "образование", "семейный"]
  660. category_id: "category_children_programs_education_borbad"
  661. category_path: ["category_education_borbad", "category_children_programs_education_borbad"]
  662. status: "upcoming"
  663. registration_required: true
  664. created_at: currentDate
  665. updated_at: currentDate
  666. }
  667. ]
  668. try
  669. createdCount = 0
  670. updatedCount = 0
  671. for doc in sampleData
  672. try
  673. existing = await @db.get(doc._id)
  674. doc._rev = existing._rev
  675. await @db.put(doc)
  676. updatedCount++
  677. debug.log "Обновлен документ: "+doc._id
  678. catch error
  679. if error.status is 404
  680. await @db.put(doc)
  681. createdCount++
  682. debug.log "Создан документ: "+doc._id
  683. else
  684. throw error
  685. debug.log "Тестовые данные успешно созданы: создано "+createdCount+", обновлено "+updatedCount
  686. catch error
  687. debug.log "Ошибка при создании тестовых данных: "+error
  688. # Основной метод инициализации
  689. initialize: ->
  690. debug.log "Начало инициализации базы данных"
  691. await @createDatabaseIfNotExists()
  692. await @cleanupOldDocuments()
  693. await @setupDesignDocuments()
  694. await @createSampleData()
  695. debug.log "Инициализация базы данных завершена"
  696. # Экспорт класса
  697. module.exports = DatabaseSeeder
  698. # Если файл запущен напрямую
  699. if require.main is module
  700. seeder = new DatabaseSeeder('borbad_events')
  701. seeder.initialize().catch (error) ->
  702. debug.log "Критическая ошибка инициализации: "+error