sync-postgresql-provider

NodeJS модуль для обработки пакетов синхронизации *.bkp

Автор: Aleksandr Krasnov
Версия: 1.0.0
Постоянная ссылка: http://docs.appcode.pw/projects?project=sync-postgresql-provider

Описание\r\n\r\nПровайдер для анализа и обработки пакета .bkp. Основные методы:\r\n\r\n getAttachments: (bkpPath, callback: (err: Error, attachments: any)) => void - получает вложения по запросу\r\n* saveAttachments: (bkpPath, callback: (err: Error, attachments: any)) => void - сохранение вложений в ФС\r\n* select: (bkpPath, callback: (err: Error, result: any)) => void - выборка данных из БД\r\n* append: (bkpPath, callback: (err: Error, result: any)) => void - выборка данных из БД для добавления\r\n* applyToDb: (bkpPath, callback: (err: Error, result: any)) => void - применение данных из пакета к БД\r\n\r\n### Применение\r\n\r\n\r\nvar provider = require('sync-postgresql-provider')(connectionString, attachmentPath);\r\nprovider.applyToDb(bkpPath, function(err, results) {\r\n\r\n});\r\n\r\n\r\n### Структура файла .bkp\r\n\r\nОписание механизма хранения и чтения читать тут\r\n\r\n### Описание дополнительных полей\r\n\r\nВсе дополнительные поля начинаются с __ (двойного подчеркивания)\r\n\r\n __type: string - тип операциия, Может быть create, update, delete\r\n* __sync: boolean - синхронизирован или нет, По умолчанию всегда false\r\n* __tid: string|number - идентификатор транзакции у синхронизации\r\n* __id: string|any - внутренний идентификатор indexedDB\r\n* _key: string - указывается имя первичного ключа\r\n\r\n### Описание операция\r\n\r\n#### create\r\n\r\nСоздание записи в БД.\r\n\r\nЕсли при добавление записи в БД индентификатор генерируется автоматически (id: integer AUTOINCREMENT), то идентификатор не нужно передавать в объекте, либо если __auto_increment будет равен true, то автоматически первичный ключ будет удален (наличие __key все равно обязательно).\r\n\r\n\r\n{\r\n action_code: 'CE0',\r\n action_message: 'test1',\r\n action_date: new Date(),\r\n app_name: 'sync-postgresql-provider',\r\n app_version: '1.0.0',\r\n user_name: 'Aleksandr',\r\n region: 'cheb',\r\n __type: 'create',\r\n __sync: false,\r\n __tid: '',\r\n __id: '1',\r\n __key: '1',\r\n __auto_increment: true\r\n}\r\n\r\n\r\n#### update\r\n\r\nОбновление записи в БД\r\n\r\nОбязательно нужно передавать идентификатор записи в БД, внутренний идентификатор __id может не являться им.\r\n\r\nНаличие дополнительного поля __key: string является обязательным\r\n\r\n\r\n{\r\n id: 1, // обязательное поле\r\n code: 'NE0',\r\n __type: 'update',\r\n __sync: false,\r\n __tid: '',\r\n __id: '1',\r\n __key: 'id' // обязательное поле\r\n}\r\n\r\n\r\n#### delete\r\n\r\nУдаление записи из БД\r\n\r\nОбязательно нужно передавать идентификатор записи в БД, внутренний идентификатор __id может не являться им.\r\n\r\nНаличие дополнительного поля __key: string является обязательным\r\n\r\n\r\n{\r\n id: 56, // обязательное поле\r\n __type: 'delete',\r\n __sync: false,\r\n __tid: '',\r\n __id: '56',\r\n __key: 'id' // обязательное поле\r\n}\r\n\r\n\r\n### Описание функция\r\n\r\n#### applyToDb\r\n\r\nФункция считывает блок items в котором храниться информация в виде объекта:\r\n\r\n\r\n{\r\n tableName : [{\r\n ..., // тут список полей\r\n __type: 'create',\r\n __sync: false,\r\n __tid: '',\r\n __id: '1'\r\n }, {\r\n ...\r\n }],\r\n tableName2 : [{\r\n id: 56,\r\n ..., // тут список полей\r\n __type: 'update',\r\n __sync: false,\r\n __tid: '',\r\n __id: '1',\r\n __key: 'id'\r\n }]\r\n}\r\n\r\n\r\nРезультатом обработки будет объект:\r\n\r\n\r\n{\r\n __errors: [],\r\n tableName: [...],\r\n tableName2: [...]\r\n}\r\n\r\n\r\nРезультат обработанной записи\r\n\r\n\r\n{\r\n __id: any, // копируется из записи\r\n __type: string, // копируется из записи\r\n __sync: boolean, // указать true\r\n __tid: string|number // копируется из записи\r\n}\r\n\r\n\r\nФормат ошибок\r\n\r\nОшибки хранятся в массиве __errors\r\n\r\n\r\n{\r\n __id: any // внутрениий идентификатор\r\n message: string // текст сообщения об ошибке\r\n}\r\n\r\n\r\nЕсли при обработки записи возникла ошибка, то запись не помещается в основной результат.\r\n\r\n\r\n{\r\n __errors: [{\r\n __id: any,\r\n __message: string\r\n }],\r\n tableName: [{\r\n ... // тут записи с __id не должно быть\r\n }]\r\n}\r\n\r\n\r\n#### select\r\n\r\nСчитывает блок select. Если блок не указан, то резульат будет null\r\n\r\nРезультат обработанной записи\r\n\r\n\r\n{\r\n tableName: [{\r\n select: 'id,action_code,action_message,action_date,app_name,app_version,user_name,region', // список полей\r\n filter: [{ // фильтрация\r\n "property": "action_message",\r\n "value": "test1"\r\n }],\r\n limit: 3\r\n }], // тут выборка из БД\r\n tableName2: []\r\n}\r\n\r\n\r\nПодробнее о выборке тут\r\n\r\nФормат ошибок\r\n\r\n\r\n{\r\n __errors: [{\r\n tableName: string, // указывается имя таблицы в которой произошла ошибка\r\n message: string // текст сообщений об ошибке\r\n }]\r\n}\r\n\r\n\r\n#### append\r\n\r\nСчитывает данные из блока append. Но при этом эти данные предназначены для добавление в локальное хранилище. Результат возвращения данных такой же как и у select\r\n\r\n#### saveAttachments\r\n\r\nСчитывает свойство attachments и сохраняет информацию в файловой системе.\r\nДанныей блок может быть и не указан, тогда результа будет null\r\n\r\n\r\nbkp.attachment('1', fs.readFileSync(join(__dirname, 'resources', 'pic1.jpg')), {\r\n path: '/temp/pics/pic1.jpg'\r\n});\r\n\r\n\r\nПервым параметром передается идентификатор записи (он может быть внутренним, т.к. в обработке он не участвует), второй - массив байтов, треьим - дополнительные параметры\r\n\r\nВ дополнительных параметрах обязательно нужно передавать свойство path, которое содержит относительный путь для сохранения в ФС\r\n\r\nРезультат обработанной записи\r\n\r\n\r\nitems: [{\r\n key: string|any // указывается идентификатор записи\r\n}]\r\n\r\n\r\nФормат ошибок\r\n\r\n\r\n__errors: [{\r\n key: string|any, // указывается идентификатор записи\r\n massage: string // текст ошибки\r\n}]\r\n\r\n\r\n#### getAttachments\r\n\r\nСчитывается блок attachments. Передназначен для возвращения вложений.\r\n\r\nРезультат обработанной записи\r\n\r\n\r\nitems: [{\r\n path: string, // относительный путь\r\n buffer: Buffer // массив байтов\r\n}]\r\n\r\n\r\nФормат ошибок\r\n\r\n\r\n__errors: [{\r\n path: string, // относительный путь\r\n massage: string // текст ошибки\r\n}]\r\n\r\n\r\n### Тестирование\r\n\r\nГенерация временных данных для тестирования\r\n\r\nЕсли возникли проблемы с тестированием проекта, то убедитесь что в папке resources есть файл test.bkp. Если его нет, то выполните следующую команду:\r\n\r\n\r\nnode generate-temp-data\r\n\r\n\r\nЗатем выполнить\r\n\r\n\r\nnodeunit test test\\modules\r\n

Установка из репозитория

git clone git://git.appcode.pw/sync-postgresql-provider.git

Инструкция по установке

Применяется для модуля sync-transfer\r\n\r\n\r\nvar transfer = require('sync-transfer');\r\n...\r\napp.use(transfer(join(rootDir, 'temp'), require('sync-postgresql-provider')(connectionString, bkpPath, attachmentPath)));\r\n

Файлы

Файл Создан Обновлен Примечание
/index.js 28.12.2018 10:34:31 09.01.2019 10:21:24
/modules/util.js 28.12.2018 10:33:08 09.01.2019 10:02:22 вспомогательный модуль для обработки данных
/modules/postgresql-query-creator.js 26.12.2018 07:30:54 27.12.2018 04:23:53 Содержит набор функция для работы БД PostgreSql
/modules/postgresql-connection-db.js 26.12.2018 07:18:07 26.12.2018 08:54:22 Предназначен для подключения к БД PostgreSql