pouch.coffee 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # app/utils/pouch.coffee
  2. class PouchDBService
  3. constructor: (options = {}) ->
  4. {@localDbName, @remoteDbUrl, @appVersion} = options
  5. @localDb = null
  6. @remoteDb = null
  7. @syncHandler = null
  8. @initialized = false
  9. init: ->
  10. return Promise.resolve() if @initialized
  11. try
  12. # Инициализация локальной базы
  13. @localDb = new PouchDB(@localDbName or 'braer_color_cache')
  14. log 'Локальная PouchDB инициализирована'
  15. # Инициализация удаленной базы
  16. @remoteDb = new PouchDB(@remoteDbUrl, {
  17. skip_setup: false
  18. fetch: (url, opts) ->
  19. # Добавление обработки CORS и аутентификации
  20. opts.credentials = 'include'
  21. PouchDB.fetch(url, opts)
  22. })
  23. # Настройка непрерывной синхронизации:cite[7]
  24. @syncHandler = PouchDB.sync(@localDb, @remoteDb, {
  25. live: true,
  26. retry: true,
  27. filter: (doc) => @shouldSyncDocument(doc)
  28. })
  29. .on 'change', (info) =>
  30. log 'Синхронизация: данные изменены', info
  31. .on 'error', (err) =>
  32. log 'Ошибка синхронизации:', err
  33. @initialized = true
  34. log 'PouchDB сервис полностью инициализирован'
  35. return Promise.resolve()
  36. catch error
  37. log 'Критическая ошибка инициализации PouchDB:', error
  38. return Promise.reject(error)