DomainService.coffee 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # app/services/DomainService.coffee
  2. { DomainSettings } = require 'app/types/data'
  3. class DomainService
  4. constructor: ->
  5. @pouchService = require 'app/utils/pouch'
  6. @initialized = false
  7. @currentDomain = window.location.hostname
  8. init: ->
  9. return Promise.resolve() if @initialized
  10. try
  11. await @pouchService.init()
  12. @initialized = true
  13. log '✅ DomainService инициализирован'
  14. return Promise.resolve()
  15. catch error
  16. log '❌ Ошибка инициализации DomainService:', error
  17. return Promise.reject(error)
  18. loadDomainSettings: (domain = @currentDomain) ->
  19. await @ensureInit()
  20. try
  21. docId = "domain_settings:#{domain}"
  22. settingsDoc = await @pouchService.getDocument(docId)
  23. settings = new DomainSettings(settingsDoc)
  24. log "🌐 Настройки домена загружены: #{domain}"
  25. return settings
  26. catch error
  27. if error.status == 404
  28. log "⚠️ Настройки домена не найдены, создаем defaults: #{domain}"
  29. return @createDefaultSettings(domain)
  30. else
  31. log "❌ Ошибка загрузки настроек домена #{domain}:", error
  32. throw error
  33. createDefaultSettings: (domain) ->
  34. settings = new DomainSettings()
  35. settings._id = "domain_settings:#{domain}"
  36. settings.domain = domain
  37. settings.companyName = 'Браер-Колор'
  38. settings.languages = ['ru']
  39. settings.defaultLanguage = 'ru'
  40. settings.theme = 'light'
  41. # Сохраняем настройки по умолчанию
  42. await @saveDomainSettings(settings)
  43. return settings
  44. saveDomainSettings: (settings) ->
  45. await @ensureInit()
  46. try
  47. result = await @pouchService.saveDocument(settings)
  48. log "💾 Настройки домена сохранены: #{settings.domain}"
  49. return result
  50. catch error
  51. log "❌ Ошибка сохранения настроек домена:", error
  52. throw error
  53. getAvailableDomains: ->
  54. # Здесь будет логика получения списка доступных доменов
  55. # Пока возвращаем тестовые данные
  56. return [
  57. 'braer-color.ru'
  58. 's5l.ru'
  59. 'localhost'
  60. ]
  61. getDomainConfig: (domain) ->
  62. # Конфигурация для конкретного домена
  63. baseConfig =
  64. theme: 'light'
  65. language: 'ru'
  66. currency: 'RUB'
  67. # Доменные специфические настройки
  68. domainConfigs =
  69. 'braer-color.ru':
  70. companyName: 'Браер-Колор'
  71. theme: 'brand'
  72. 's5l.ru':
  73. companyName: 'S5L Group'
  74. theme: 'dark'
  75. return { ...baseConfig, ...(domainConfigs[domain] or {}) }
  76. ensureInit: ->
  77. unless @initialized
  78. throw new Error('DomainService не инициализирован. Вызовите init() сначала.')
  79. module.exports = new DomainService()