seed-events.coffee 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. # Подключение PouchDB
  2. PouchDB = require 'pouchdb'
  3. debug = require('../../../utils/coffee/debug.coffee').default
  4. class DatabaseSeeder
  5. constructor: (dbName, baseUrl = 'http://oleg:631074@localhost:5984') ->
  6. @dbName = dbName
  7. @baseUrl = baseUrl
  8. @db = new PouchDB(@baseUrl+"/"+@dbName)
  9. @designDoc = require './design-documents.coffee'
  10. # Проверка существования базы данных
  11. checkDatabaseExists: ->
  12. try
  13. info = await @db.info()
  14. debug.log "База данных "+@dbName+" существует"
  15. return true
  16. catch error
  17. debug.log "База данных "+@dbName+" не существует: "+error
  18. return false
  19. # Создание базы данных если не существует
  20. createDatabaseIfNotExists: ->
  21. exists = await @checkDatabaseExists()
  22. if not exists
  23. try
  24. # Создаем базу через PUT запрос
  25. response = await fetch(@baseUrl+"/"+@dbName, method: 'PUT')
  26. if response.ok
  27. debug.log "База данных "+@dbName+" создана"
  28. else
  29. debug.log "Ошибка создания базы: "+response.statusText
  30. catch error
  31. debug.log "Ошибка при создании базы: "+error
  32. return exists
  33. # Проверка и создание design документов
  34. setupDesignDocuments: ->
  35. try
  36. for designName, designDoc of @designDoc
  37. docId = "_design/"+designName
  38. try
  39. # Пытаемся получить текущий документ
  40. currentDoc = await @db.get(docId)
  41. # Сравниваем версии
  42. if currentDoc.version isnt designDoc.version
  43. debug.log "Обновление design документа: "+designName
  44. designDoc._id = docId
  45. designDoc._rev = currentDoc._rev
  46. await @db.put(designDoc)
  47. debug.log "Design документ "+designName+" обновлен до версии "+designDoc.version
  48. else
  49. debug.log "Design документ "+designName+" актуален"
  50. catch error
  51. if error.status is 404
  52. # Документ не существует, создаем новый
  53. debug.log "Создание design документа: "+designName
  54. designDoc._id = docId
  55. await @db.put(designDoc)
  56. debug.log "Design документ "+designName+" создан"
  57. else
  58. throw error
  59. catch error
  60. debug.log "Ошибка при настройке design документов: "+error
  61. # Создание тестовых данных
  62. createSampleData: ->
  63. sampleData = [
  64. # Блог посты
  65. {
  66. _id: "blog_post_" + Math.floor(Math.random() * 9000) + 1000
  67. type: "blog_post"
  68. title: "Добро пожаловать в Кохи Борбад"
  69. content: "# Добро пожаловать!\n\nМы рады приветствовать вас в нашем новом концертном зале."
  70. excerpt: "Приветственное сообщение нового концертного зала"
  71. image: "/assets/borbad.s5l.ru/welcome.jpg"
  72. tags: ["новости", "приветствие"]
  73. author: "Администрация"
  74. status: "published"
  75. created_at: new Date().toISOString()
  76. updated_at: new Date().toISOString()
  77. views: 0
  78. }
  79. # Слайды
  80. {
  81. _id: "slide_"+Math.floor(Math.random() * 9000) + 1000
  82. type: "slide"
  83. title: "Концертный зал Борбад"
  84. content: "## Современное пространство для искусства\n\nЛучшие мероприятия города"
  85. image: "/assets/borbad.s5l.ru/slide1.jpg"
  86. order: 1
  87. active: true
  88. button_text: "Узнать больше"
  89. button_link: "/about"
  90. created_at: new Date().toISOString()
  91. updated_at: new Date().toISOString()
  92. }
  93. # Мероприятия
  94. {
  95. _id: "event_"+Math.floor(Math.random() * 9000) + 1000
  96. type: "event"
  97. title: "Симфонический концерт"
  98. content: "## Программа вечера\n\n- Бетховен Симфония №5\n- Чайковский Лебединое озеро"
  99. event_date: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString()
  100. end_date: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000 + 2 * 60 * 60 * 1000).toISOString()
  101. location: "Большой зал"
  102. price: 500
  103. currency: "TJS"
  104. available_tickets: 100
  105. total_tickets: 100
  106. image: "/assets/borbad.s5l.ru/concert1.jpg"
  107. gallery: [
  108. "/assets/borbad.s5l.ru/gallery1.jpg"
  109. "/assets/borbad.s5l.ru/gallery2.jpg"
  110. ]
  111. tags: ["концерт", "симфоническая музыка", "классика"]
  112. status: "upcoming"
  113. registration_required: true
  114. created_at: new Date().toISOString()
  115. updated_at: new Date().toISOString()
  116. }
  117. # Товары
  118. {
  119. _id: "product_"+Math.floor(Math.random() * 9000) + 1000
  120. type: "product"
  121. title: "Футболка с логотипом"
  122. content: "## Качественная хлопковая футболка\n\nРазмеры: S, M, L, XL"
  123. excerpt: "Фирменная футболка концертного зала"
  124. image: "/assets/borbad.s5l.ru/tshirt.jpg"
  125. price: 250
  126. currency: "TJS"
  127. category: "сувениры"
  128. tags: ["одежда", "сувениры", "мерч"]
  129. attributes:
  130. sizes: ["S", "M", "L", "XL"]
  131. colors: ["белый", "черный"]
  132. material: "100% хлопок"
  133. inventory: 50
  134. status: "available"
  135. created_at: new Date().toISOString()
  136. updated_at: new Date().toISOString()
  137. }
  138. # Категории
  139. {
  140. _id: "category_"+Math.floor(Math.random() * 9000) + 1000
  141. type: "category"
  142. name: "Концерты"
  143. slug: "concerts"
  144. description: "Музыкальные мероприятия"
  145. image: "/assets/borbad.s5l.ru/category-concerts.jpg"
  146. parent: null
  147. order: 1
  148. created_at: new Date().toISOString()
  149. updated_at: new Date().toISOString()
  150. }
  151. # Темы
  152. {
  153. _id: "theme_"+Math.floor(Math.random() * 9000) + 1000
  154. type: "theme"
  155. name: "Классическая музыка"
  156. slug: "classical-music"
  157. description: "Мероприятия классической музыки"
  158. color: "#3B82F6"
  159. created_at: new Date().toISOString()
  160. updated_at: new Date().toISOString()
  161. }
  162. ]
  163. try
  164. for doc in sampleData
  165. try
  166. # Проверяем существует ли документ
  167. existing = await @db.get(doc._id)
  168. doc._rev = existing._rev
  169. await @db.put(doc)
  170. debug.log "Обновлен документ: "+doc._id
  171. catch error
  172. if error.status is 404
  173. # Документ не существует, создаем новый
  174. await @db.put(doc)
  175. debug.log "Создан документ: "+doc._id
  176. else
  177. throw error
  178. debug.log "Тестовые данные успешно созданы"
  179. catch error
  180. debug.log "Ошибка при создании тестовых данных: "+error
  181. # Основной метод инициализации
  182. initialize: ->
  183. debug.log "Начало инициализации базы данных"
  184. await @createDatabaseIfNotExists()
  185. await @setupDesignDocuments()
  186. await @createSampleData()
  187. debug.log "Инициализация базы данных завершена"
  188. # Экспорт класса
  189. module.exports = DatabaseSeeder
  190. # Если файл запущен напрямую
  191. if require.main is module
  192. seeder = new DatabaseSeeder('borbad_events')
  193. seeder.initialize().catch (error) ->
  194. debug.log "Критическая ошибка инициализации: "+error