51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
var NamedMapMapConfigProvider = require('../models/mapconfig/named_map_provider');
|
|
var templateName = require('../backends/template_maps').templateName;
|
|
|
|
var LruCache = require("lru-cache");
|
|
|
|
function NamedMapProviderCache(templateMaps, pgConnection, userLimitsApi, queryTablesApi) {
|
|
this.templateMaps = templateMaps;
|
|
this.pgConnection = pgConnection;
|
|
this.userLimitsApi = userLimitsApi;
|
|
this.queryTablesApi = queryTablesApi;
|
|
|
|
this.providerCache = new LruCache({ max: 2000 });
|
|
}
|
|
|
|
module.exports = NamedMapProviderCache;
|
|
|
|
NamedMapProviderCache.prototype.get = function(user, templateId, config, authToken, params) {
|
|
var namedMapKey = createNamedMapKey(user, templateId);
|
|
var namedMapProviders = this.providerCache.get(namedMapKey) || {};
|
|
|
|
var providerKey = createProviderKey(config, authToken);
|
|
if (!namedMapProviders.hasOwnProperty(providerKey)) {
|
|
namedMapProviders[providerKey] = new NamedMapMapConfigProvider(
|
|
this.templateMaps,
|
|
this.pgConnection,
|
|
this.userLimitsApi,
|
|
this.queryTablesApi,
|
|
user,
|
|
templateId,
|
|
config,
|
|
authToken,
|
|
params
|
|
);
|
|
this.providerCache.set(namedMapKey, namedMapProviders);
|
|
}
|
|
|
|
return namedMapProviders[providerKey];
|
|
};
|
|
|
|
NamedMapProviderCache.prototype.invalidate = function(user, templateId) {
|
|
this.providerCache.del(createNamedMapKey(user, templateId));
|
|
};
|
|
|
|
function createNamedMapKey(user, templateId) {
|
|
return user + ':' + templateName(templateId);
|
|
}
|
|
|
|
function createProviderKey(config, authToken) {
|
|
return NamedMapMapConfigProvider.configHash(config) + ':' + authToken;
|
|
}
|