# 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()