| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # app/utils/pouch.coffee
- class PouchDBService
- constructor: (options = {}) ->
- {@localDbName, @remoteDbUrl, @appVersion} = options
- @localDb = null
- @remoteDb = null
- @syncHandler = null
- @initialized = false
- init: ->
- return Promise.resolve() if @initialized
-
- try
- # Инициализация локальной базы
- @localDb = new PouchDB(@localDbName or 'braer_color_cache')
- log 'Локальная PouchDB инициализирована'
-
- # Инициализация удаленной базы
- @remoteDb = new PouchDB(@remoteDbUrl, {
- skip_setup: false
- fetch: (url, opts) ->
- # Добавление обработки CORS и аутентификации
- opts.credentials = 'include'
- PouchDB.fetch(url, opts)
- })
-
- # Настройка непрерывной синхронизации:cite[7]
- @syncHandler = PouchDB.sync(@localDb, @remoteDb, {
- live: true,
- retry: true,
- filter: (doc) => @shouldSyncDocument(doc)
- })
- .on 'change', (info) =>
- log 'Синхронизация: данные изменены', info
- .on 'error', (err) =>
- log 'Ошибка синхронизации:', err
-
- @initialized = true
- log 'PouchDB сервис полностью инициализирован'
- return Promise.resolve()
-
- catch error
- log 'Критическая ошибка инициализации PouchDB:', error
- return Promise.reject(error)
|