Authored by 刘传洋

add cache

@@ -13,6 +13,8 @@ const serviceApi = global.yoho.ServiceAPI; @@ -13,6 +13,8 @@ const serviceApi = global.yoho.ServiceAPI;
13 const _ = require('lodash'); 13 const _ = require('lodash');
14 const helpers = global.yoho.helpers; 14 const helpers = global.yoho.helpers;
15 const images = require('../../../utils/images.js'); 15 const images = require('../../../utils/images.js');
  16 +const cache = global.yoho.cache;
  17 +const logger = global.yoho.logger;
16 18
17 const getSortByConditionAsync = (condition) => { 19 const getSortByConditionAsync = (condition) => {
18 return api.get('sortgroup.json', condition); 20 return api.get('sortgroup.json', condition);
@@ -27,6 +29,18 @@ const isFavoriteBrandUrl = '/shops/service/v1/favorite/'; @@ -27,6 +29,18 @@ const isFavoriteBrandUrl = '/shops/service/v1/favorite/';
27 // 根据品牌查询相关文章 29 // 根据品牌查询相关文章
28 const relateArticleUrl = 'guang/service/v2/article/getArticleByBrand'; 30 const relateArticleUrl = 'guang/service/v2/article/getArticleByBrand';
29 31
  32 +const getSearchCackeKey = params => {
  33 +
  34 + let ks= [];
  35 + _.forEach(params, (val, key) => {
  36 + if(params.hasOwnProperty(key) && !_.includes(['page', 'limit', 'need_filter', 'order'], key)) {
  37 + ks.push(val);
  38 + }
  39 + });
  40 +
  41 + return ks.join('_');
  42 +}
  43 +
30 /** 44 /**
31 * 获取商品列表 45 * 获取商品列表
32 * @return 46 * @return
@@ -37,11 +51,46 @@ const getProductList = (params) => { @@ -37,11 +51,46 @@ const getProductList = (params) => {
37 51
38 // method: 'app.search.li', 52 // method: 'app.search.li',
39 order: 's_n_desc', 53 order: 's_n_desc',
  54 + need_filter: 'yes',
40 limit: 60 55 limit: 60
41 }; 56 };
42 57
43 Object.assign(finalParams, params); 58 Object.assign(finalParams, params);
44 - return yohoApi.get('', finalParams); 59 +
  60 + let cKey= getSearchCackeKey(finalParams);
  61 +
  62 + return cache.get(cKey).catch().then(cdata => {
  63 +
  64 + let hasCache= false;
  65 + if(cdata) {
  66 +
  67 + try {
  68 + cdata= JSON.parse(cdata);
  69 + } catch(e) {
  70 + logger.debug('getProductList cache data parse fail.');
  71 + }
  72 +
  73 + if(cdata.filter && cdata.standard) {
  74 + hasCache= true;
  75 + finalParams.need_filter= 'no';
  76 + }
  77 + }
  78 +
  79 + return yohoApi.get('', finalParams).then(result => {
  80 +
  81 + if(hasCache && result && result.data) {
  82 + Object.assign(result.data, cdata);
  83 + } else {
  84 + if(result && result.data && result.data.filter) {
  85 + cache.set(cKey, Object.assign({}, {
  86 + filter: result.data.filter,
  87 + standard: result.data.standard
  88 + }));
  89 + }
  90 + }
  91 + return result;
  92 + });
  93 + });
45 }; 94 };
46 95
47 /** 96 /**
@@ -57,7 +106,30 @@ const getSortList = (params) => { @@ -57,7 +106,30 @@ const getSortList = (params) => {
57 }; 106 };
58 107
59 Object.assign(finalParams, params); 108 Object.assign(finalParams, params);
60 - return yohoApi.get('', finalParams); 109 +
  110 + let cKey= getSearchCackeKey(finalParams);
  111 +
  112 + return cache.get(cKey).catch().then(cdata => {
  113 +
  114 + let cdataObj;
  115 + if(cdata) {
  116 + try {
  117 + cdataObj= JSON.parse(cdata);
  118 + } catch(e) {
  119 + logger.debug('getSortList cache data parse fail.');
  120 + }
  121 + }
  122 +
  123 + if(cdataObj) {
  124 + return cdataObj;
  125 + } else {
  126 + return yohoApi.get('', finalParams).then(ret => {
  127 +
  128 + cache.set(cKey, ret);
  129 + return ret;
  130 + });
  131 + }
  132 + });
61 }; 133 };
62 134
63 /** 135 /**
@@ -150,9 +222,28 @@ const getBrandShop = (query) => { @@ -150,9 +222,28 @@ const getBrandShop = (query) => {
150 }; 222 };
151 223
152 Object.assign(finalParams, {keyword: query}); 224 Object.assign(finalParams, {keyword: query});
153 - return yohoApi.get('', finalParams).then(ret => {  
154 - if (ret && ret.code === 200) {  
155 - return ret.data; 225 +
  226 + let cKey= getSearchCackeKey(finalParams);
  227 +
  228 + return cache.get(cKey).catch().then(cdata => {
  229 +
  230 + let retObj;
  231 + try {
  232 + if(cdata) retObj = JSON.parse(cdata);
  233 + } catch(e) {
  234 + logger.debug('getBrandShop cache data parse fail.');
  235 + }
  236 +
  237 + if(retObj) {
  238 + return retObj;
  239 + } else {
  240 + return yohoApi.get('', finalParams).then(ret => {
  241 + if (ret && ret.code === 200) {
  242 +
  243 + cache.set(cKey, ret.data);
  244 + return ret.data;
  245 + }
  246 + });return
156 } 247 }
157 }); 248 });
158 }; 249 };
@@ -163,12 +254,33 @@ const getBrandShop = (query) => { @@ -163,12 +254,33 @@ const getBrandShop = (query) => {
163 */ 254 */
164 const getShopsByBrandId = bid => { 255 const getShopsByBrandId = bid => {
165 256
166 - return yohoApi.get('', { 257 + let finalParams= {
167 method: 'app.shop.queryShopsByBrandId', 258 method: 'app.shop.queryShopsByBrandId',
168 brand_id: bid 259 brand_id: bid
169 - }).then(ret => {  
170 - if (ret && ret.code === 200) {  
171 - return ret.data; 260 + }
  261 +
  262 + let cKey= getSearchCackeKey(finalParams);
  263 +
  264 + return cache.get(cKey).catch().then(cdata => {
  265 + let cdataObj;
  266 + if(cdata) {
  267 + try {
  268 + cdataObj= JSON.parse(cdata);
  269 + } catch(e) {
  270 + logger.debug('getShopsByBrandId cache data parse fail.');
  271 + }
  272 + }
  273 +
  274 + if(cdataObj) {
  275 + return cdataObj;
  276 + } else {
  277 + return yohoApi.get('', finalParams).then(ret => {
  278 + if (ret && ret.code === 200) {
  279 +
  280 + cache.set(cKey, ret.data);
  281 + return ret.data;
  282 + }
  283 + });
172 } 284 }
173 }); 285 });
174 }; 286 };