ns2-front-module-common
Version:
NS2 common module
95 lines • 4.28 kB
JavaScript
import { Injectable, Inject } from "@angular/core";
import { HttpService } from "./http.service";
/**
* Класс для работы со справочниками
*/
var RefsService = (function () {
function RefsService(httpService, cache) {
this.httpService = httpService;
this.cache = cache;
}
RefsService.prototype.setRefsEndPoint = function (_refsEndPoint) {
this.refsEndPoint = _refsEndPoint;
};
/**
* Синхронизирует справочники с бэкендом
* @returns {Promise<T>}
*/
RefsService.prototype.synchronize = function () {
var _this = this;
return new Promise(function (resolve) {
var url = _this.refsEndPoint + 'refs/last-modified';
_this.httpService.get(url)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (data) {
var process = function (localInfo) {
_this.processLastModified(localInfo, data).then(resolve).catch(resolve);
};
_this.cache.get(RefsService.REFS_LAST_MODIFIED_INFO_KEY)
.then(function (localInfo) {
process(localInfo);
})
.catch(function () {
process({});
});
}, function () {
resolve();
});
});
};
/**
* Сравнивает локальные справочники и удаленные.
* При обнаружении измененных, добавленных или удаленных справочников - удаляет все записи из кеша относящиеся к этим справочникам
*
* @param {any} localInfo Объект с локальными справочниками, где ключ - имя справочника, значение - timestamp последнего изменения
* @param {any[]} remoteInfo Массив объектов с информацией о справочниках на сервере
* @returns {Promise<[]>}
*/
RefsService.prototype.processLastModified = function (localInfo, remoteInfo) {
var depends = [];
var resultLocalInfo = {};
var updateLocalInfo = false;
localInfo = localInfo || {};
// Проверяем измененные и добавленные справочники
for (var _i = 0, remoteInfo_1 = remoteInfo; _i < remoteInfo_1.length; _i++) {
var remoteItem = remoteInfo_1[_i];
remoteItem = remoteItem || {};
var remoteLastModified = remoteItem.updated || 0;
var refName = remoteItem.class_name || null;
if (!localInfo.hasOwnProperty(refName)) {
updateLocalInfo = true;
}
else if (localInfo.hasOwnProperty(refName) && (localInfo[refName] < remoteLastModified)) {
depends.push(this.cache.removeByTag(refName));
updateLocalInfo = true;
}
resultLocalInfo[refName] = remoteLastModified;
}
// Проверяем удаленные справочники
var localKeys = Object.keys(localInfo);
for (var i = 0; i < localKeys.length; i++) {
var localRefName = localKeys[i];
if (!resultLocalInfo.hasOwnProperty(localRefName)) {
depends.push(this.cache.removeByTag(localRefName));
updateLocalInfo = true;
}
}
if (updateLocalInfo) {
depends.push(this.cache.set(RefsService.REFS_LAST_MODIFIED_INFO_KEY, resultLocalInfo));
}
return Promise.all(depends);
};
return RefsService;
}());
export { RefsService };
RefsService.REFS_LAST_MODIFIED_INFO_KEY = 'refs_last_modified_info';
RefsService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
RefsService.ctorParameters = function () { return [
{ type: HttpService, },
{ type: undefined, decorators: [{ type: Inject, args: ['StorageInterface',] },] },
]; };
//# sourceMappingURL=refs.service.js.map