Authored by 刘传洋

add cache

... ... @@ -13,6 +13,8 @@ const serviceApi = global.yoho.ServiceAPI;
const _ = require('lodash');
const helpers = global.yoho.helpers;
const images = require('../../../utils/images.js');
const cache = global.yoho.cache;
const logger = global.yoho.logger;
const getSortByConditionAsync = (condition) => {
return api.get('sortgroup.json', condition);
... ... @@ -27,6 +29,18 @@ const isFavoriteBrandUrl = '/shops/service/v1/favorite/';
// 根据品牌查询相关文章
const relateArticleUrl = 'guang/service/v2/article/getArticleByBrand';
const getSearchCackeKey = params => {
let ks= [];
_.forEach(params, (val, key) => {
if(params.hasOwnProperty(key) && !_.includes(['page', 'limit', 'need_filter', 'order'], key)) {
ks.push(val);
}
});
return ks.join('_');
}
/**
* 获取商品列表
* @return
... ... @@ -37,11 +51,46 @@ const getProductList = (params) => {
// method: 'app.search.li',
order: 's_n_desc',
need_filter: 'yes',
limit: 60
};
Object.assign(finalParams, params);
return yohoApi.get('', finalParams);
let cKey= getSearchCackeKey(finalParams);
return cache.get(cKey).catch().then(cdata => {
let hasCache= false;
if(cdata) {
try {
cdata= JSON.parse(cdata);
} catch(e) {
logger.debug('getProductList cache data parse fail.');
}
if(cdata.filter && cdata.standard) {
hasCache= true;
finalParams.need_filter= 'no';
}
}
return yohoApi.get('', finalParams).then(result => {
if(hasCache && result && result.data) {
Object.assign(result.data, cdata);
} else {
if(result && result.data && result.data.filter) {
cache.set(cKey, Object.assign({}, {
filter: result.data.filter,
standard: result.data.standard
}));
}
}
return result;
});
});
};
/**
... ... @@ -57,7 +106,30 @@ const getSortList = (params) => {
};
Object.assign(finalParams, params);
return yohoApi.get('', finalParams);
let cKey= getSearchCackeKey(finalParams);
return cache.get(cKey).catch().then(cdata => {
let cdataObj;
if(cdata) {
try {
cdataObj= JSON.parse(cdata);
} catch(e) {
logger.debug('getSortList cache data parse fail.');
}
}
if(cdataObj) {
return cdataObj;
} else {
return yohoApi.get('', finalParams).then(ret => {
cache.set(cKey, ret);
return ret;
});
}
});
};
/**
... ... @@ -150,9 +222,28 @@ const getBrandShop = (query) => {
};
Object.assign(finalParams, {keyword: query});
return yohoApi.get('', finalParams).then(ret => {
if (ret && ret.code === 200) {
return ret.data;
let cKey= getSearchCackeKey(finalParams);
return cache.get(cKey).catch().then(cdata => {
let retObj;
try {
if(cdata) retObj = JSON.parse(cdata);
} catch(e) {
logger.debug('getBrandShop cache data parse fail.');
}
if(retObj) {
return retObj;
} else {
return yohoApi.get('', finalParams).then(ret => {
if (ret && ret.code === 200) {
cache.set(cKey, ret.data);
return ret.data;
}
});return
}
});
};
... ... @@ -163,12 +254,33 @@ const getBrandShop = (query) => {
*/
const getShopsByBrandId = bid => {
return yohoApi.get('', {
let finalParams= {
method: 'app.shop.queryShopsByBrandId',
brand_id: bid
}).then(ret => {
if (ret && ret.code === 200) {
return ret.data;
}
let cKey= getSearchCackeKey(finalParams);
return cache.get(cKey).catch().then(cdata => {
let cdataObj;
if(cdata) {
try {
cdataObj= JSON.parse(cdata);
} catch(e) {
logger.debug('getShopsByBrandId cache data parse fail.');
}
}
if(cdataObj) {
return cdataObj;
} else {
return yohoApi.get('', finalParams).then(ret => {
if (ret && ret.code === 200) {
cache.set(cKey, ret.data);
return ret.data;
}
});
}
});
};
... ...