| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # app/services/CategoryService.coffee
- { Category } = require 'app/types/data'
- class CategoryService
- constructor: ->
- @pouchService = require 'app/utils/pouch'
- @initialized = false
- init: ->
- return Promise.resolve() if @initialized
-
- try
- await @pouchService.init()
- @initialized = true
- log '✅ CategoryService инициализирован'
- return Promise.resolve()
- catch error
- log '❌ Ошибка инициализации CategoryService:', error
- return Promise.reject(error)
- getAllCategories: ->
- await @ensureInit()
-
- try
- result = await @pouchService.queryView('categories', 'active_categories', {
- include_docs: true
- })
-
- categories = result.rows.map (row) ->
- new Category(row.doc)
-
- # Сортировка по порядку
- categories.sort (a, b) -> a.order - b.order
-
- log '📂 Загружены категории:', categories.length
- return categories
- catch error
- log '❌ Ошибка загрузки категорий:', error
- throw error
- getCategoryBySlug: (slug) ->
- await @ensureInit()
-
- try
- result = await @pouchService.queryView('categories', 'by_slug', {
- key: slug
- include_docs: true
- })
-
- if result.rows.length > 0
- category = new Category(result.rows[0].doc)
- log "📂 Загружена категория по slug: #{slug}"
- return category
- else
- log "⚠️ Категория не найдена по slug: #{slug}"
- return null
- catch error
- log "❌ Ошибка поиска категории по slug #{slug}:", error
- throw error
- getHierarchicalCategories: ->
- await @ensureInit()
-
- try
- result = await @pouchService.queryView('categories', 'hierarchical', {
- include_docs: true
- })
-
- categories = result.rows.map (row) ->
- new Category(row.doc)
-
- # Построение иерархии
- hierarchical = @buildHierarchy(categories)
-
- log '🌳 Построена иерархия категорий'
- return hierarchical
- catch error
- log '❌ Ошибка построения иерархии категорий:', error
- throw error
- buildHierarchy: (categories, parentId = null) ->
- hierarchy = []
-
- categories
- .filter (cat) -> cat.parent == parentId
- .sort (a, b) -> a.order - b.order
- .forEach (category) =>
- children = @buildHierarchy(categories, category._id)
- if children.length > 0
- category.children = children
- hierarchy.push(category)
-
- return hierarchy
- saveCategory: (categoryData) ->
- await @ensureInit()
-
- try
- category = new Category(categoryData)
-
- # Генерация ID если не установлен
- if not category._id
- category._id = "category:#{Date.now()}"
-
- result = await @pouchService.saveDocument(category)
- log "💾 Категория сохранена: #{category.name}"
- return result
- catch error
- log "❌ Ошибка сохранения категории:", error
- throw error
- ensureInit: ->
- unless @initialized
- throw new Error('CategoryService не инициализирован. Вызовите init() сначала.')
- module.exports = new CategoryService()
|