Authored by 张孝茹

list

... ... @@ -40,7 +40,7 @@ const _getUidFromUserAgent = (req) => {
*/
const _baseShop = (req, res, shopInfo, shopId) => {
listModel.getBaseShopData(Object.assign(req.query, {
req.ctx(listModel).getBaseShopData(Object.assign(req.query, {
channel: req.yoho.channel
}), shopInfo).then(result => {
if (result && result.baseShopHome && result.baseShopHome.banner) {
... ... @@ -79,7 +79,7 @@ const baseShopFav = (req, res) => {
let uid = req.user.uid || req.query.uid || _getUidFromUserAgent(req);
let shopId = req.query.shopId;
listModel.getBrandFavStatus({
req.ctx(listModel).getBrandFavStatus({
uid: uid,
id: shopId,
type: 'shop'
... ... @@ -117,7 +117,7 @@ const _shop = (req, res, shopId) => {
};
}
listModel.getShopData(req, shopId, uid, isApp).then(result => {
req.ctx(listModel).getShopData(req, shopId, uid, isApp).then(result => {
if (result.goBrand) {
/* 若店铺使用基础模板跳转基础模板 */
... ... @@ -190,7 +190,7 @@ const shopFav = (req, res) => {
});
}
listModel.getBrandFavStatus({
req.ctx(listModel).getBrandFavStatus({
uid: uid,
id: shopId,
type: 'shop',
... ... @@ -303,7 +303,7 @@ const brand = (req, res, next) => {
if (req.query.from !== 'search' && brandLogo.type === '2' && brandLogo.shopId) {
_shop(req, res, brandLogo.shopId);
} else { // 获取品牌店铺信息
listModel.getBrandShops(brandId, req).then(brandShop => {
req.ctx(listModel).getBrandShops(brandId, req).then(brandShop => {
if (brandId === 0) {
params.query = domain;
}
... ... @@ -366,7 +366,7 @@ const brandFav = (req, res) => {
req.ctx(shopModel).getBrandLogoByDomain(domain).then((result) => {
brandId = result.id;
listModel.getBrandFavStatus({
req.ctx(listModel).getBrandFavStatus({
uid: uid,
id: brandId,
type: 'brand',
... ... @@ -388,7 +388,7 @@ const shopIntro = (req, res, next) => {
let params = {};
if (parseInt(shopId, 10)) {
listModel.getShopIntro(shopId).then(result => {
req.ctx(listModel).getShopIntro(shopId).then(result => {
if (appVersion) {
params = {
title: '店铺简介'
... ... @@ -459,11 +459,11 @@ const favoriteBrand = (req, res, next) => {
}
if (opt !== 'ok') { // 取消收藏
listModel.setFavoriteCancel(id, uid, type).then(result => {
req.ctx(listModel).setFavoriteCancel(id, uid, type).then(result => {
res.json(result);
}).catch(next);
} else {
listModel.setFavorite(id, uid, type).then(result => {
req.ctx(listModel).setFavorite(id, uid, type).then(result => {
res.json(result);
}).catch(next);
}
... ... @@ -477,7 +477,7 @@ const favoriteBrand = (req, res, next) => {
*/
const shopCategory = (req, res, next) => {
listModel.getShopCategory({
req.ctx(listModel).getShopCategory({
shopId: req.query.shop_id,
channel: req.yoho.channel,
gender: req.query.gender || '1,3'
... ... @@ -518,7 +518,7 @@ const getBrandCouponsList = (req, res, next) => {
param.brand_id = brandId;
listModel.brandCouponsList(param).then(result => {
req.ctx(listModel).brandCouponsList(param).then(result => {
res.json(result);
}).catch(next);
} else {
... ...
... ... @@ -200,11 +200,11 @@ const newDetail = {
}
if (req.body.opt === 'ok') {
listModel.setFavorite(req.body.id, uid, 'product').then(result => {
req.ctx(listModel).setFavorite(req.body.id, uid, 'product').then(result => {
return res.json(result);
}).catch(next);
} else {
listModel.setFavoriteCancel(req.body.id, uid, 'product').then(result => {
req.ctx(listModel).setFavoriteCancel(req.body.id, uid, 'product').then(result => {
return res.json(result);
}).catch(next);
}
... ...
... ... @@ -152,11 +152,11 @@ const newDetail = {
}
if (req.body.opt === 'ok') {
listModel.setFavorite(req.body.id, uid, 'product').then(result => {
req.ctx(listModel).setFavorite(req.body.id, uid, 'product').then(result => {
return res.json(result);
}).catch(next);
} else {
listModel.setFavoriteCancel(req.body.id, uid, 'product').then(result => {
req.ctx(listModel).setFavoriteCancel(req.body.id, uid, 'product').then(result => {
return res.json(result);
}).catch(next);
}
... ...
... ... @@ -8,7 +8,6 @@ const utils = '../../../utils';
const crypto = global.yoho.crypto;
const _ = require('lodash');
const helpers = global.yoho.helpers;
const api = global.yoho.API;
const searchModel = require('./search');
const productProcess = require(`${utils}/product-process`);
const stringProcess = require(`${global.utils}/string-process`);
... ... @@ -24,8 +23,14 @@ const yhChannel = {
lifestyle: 4
};
/* 多品牌店铺列表数据信息处理*/
const _processBrandShops = (list) => {
module.exports = class extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
this.ctx = _.get(ctx, 'req.ctx');
}
/* 多品牌店铺列表数据信息处理*/
_processBrandShops(list) {
let formatDat = [];
_.forEach(list, item => {
... ... @@ -55,15 +60,15 @@ const _processBrandShops = (list) => {
}
return formatDat;
};
}
/**
/**
* 销售类目链接拼接 APP
* @param origin
* @param shopId
* @private
*/
const _modifyWapUrl = (origin, shopId) => {
_modifyWapUrl(origin, shopId) {
if (parseInt(_.get(origin, 'linkType', 0), 10) === 1) {
return helpers.urlFormat('', {
filter_poolId: origin.categoryId,
... ... @@ -77,15 +82,15 @@ const _modifyWapUrl = (origin, shopId) => {
return '';
}
}
};
}
/**
/**
* 销售类目链接拼接 APP
* @param origin
* @param shopId
* @private
*/
const _modifyAppUrl = (origin, shopId) => {
_modifyAppUrl(origin, shopId) {
if (parseInt(_.get(origin, 'linkType', 0), 10) === 1) {
return helpers.urlFormat('/search/list', {filter_poolId: origin.categoryId}) +
`?openby:yohobuy={"action":"go.poollist","params":{"shop_id":"${shopId}","title":"${origin.categoryName}","productPool":"${origin.categoryId}"}}`; //eslint-disable-line
... ... @@ -96,33 +101,35 @@ const _modifyAppUrl = (origin, shopId) => {
return '';
}
}
};
}
/**
/**
* 获取店铺装修的所有资源接口
* @param {int} shopId 店铺id
* @return array
*/
const _getShopDecorator = (shopId) => {
return api.get('', {
_getShopDecorator(shopId) {
return this.get({
data: {
method: 'app.shopsdecorator.getList',
shop_id: shopId
}, {
},
param: {
cache: true,
code: 200
}
}).then((result) => {
return (result && result.data) || {};
});
};
}
/**
/**
* 获取店铺信息
* @param {int} shopId 店铺id
* @param {int} uid 用户id 判断用户是否收藏店铺
* @return array
*/
const _getShopInfo = (shopId, uid) => {
_getShopInfo(shopId, uid) {
let finalParams = {
method: 'app.shops.getIntro',
shop_id: shopId,
... ... @@ -138,16 +145,19 @@ const _getShopInfo = (shopId, uid) => {
});
}
return api.get('', finalParams, {code: 200}).then((result) => {
return this.get({
data: finalParams,
param: {code: 200}
}).then((result) => {
return result && result.data;
});
};
}
/**
/**
* 调取店铺简介数据
* @param {int} shopId
*/
const getShopIntro = (shopId, uid) => {
getShopIntro(shopId, uid) {
let params = {
method: 'app.shops.getIntro',
shop_id: shopId
... ... @@ -161,7 +171,10 @@ const getShopIntro = (shopId, uid) => {
params.uid = uid;
}
return api.get('', params, {code: 200}).then(result => {
return this.get({
data: params,
param: {code: 200}
}).then(result => {
if (result && result.data) {
const imgReg = /<img [^>]*src=['"]([^'"]+)[^>]*>/gi;
... ... @@ -171,25 +184,28 @@ const getShopIntro = (shopId, uid) => {
}
return result && result.data;
});
};
}
/**
/**
* 获取店铺下面的所有分类
* @param {int} shopId 店铺id
* @param {string} channel 频道
* @return array
*/
const _getShopCategory = (shopId, channel) => {
return api.get('', {
_getShopCategory(shopId, channel) {
return this.get({
data: {
method: 'app.shop.getSortInfo',
yh_channel: yhChannel[channel],
shop_id: shopId
}, {code: 200, cache: true}).then(result => {
},
param: {code: 200, cache: true}
}).then(result => {
return result && result.data;
});
};
}
/**
/**
* 处理店铺或者品牌 seo 数据
* @param channel
* @param info
... ... @@ -197,7 +213,7 @@ const _getShopCategory = (shopId, channel) => {
* @returns {{}}
* @private
*/
const _getBrandShopSeo = (channel, info, qs) => {
_getBrandShopSeo(channel, info, qs) {
let resData = {},
ctype = {
... ... @@ -211,7 +227,6 @@ const _getBrandShopSeo = (channel, info, qs) => {
name: ''
};
if (info) {
Object.assign(params, {
nameEn: _.get(info, 'brand_name_en', ''),
... ... @@ -251,51 +266,55 @@ const _getBrandShopSeo = (channel, info, qs) => {
resData.title += resData.title ? ' | YOHO!有货 100%正品保证' : '';
resData.description += resData.description ? ' YOHO! 有货中国最大的潮流商品购物网站。100%品牌正品保证,支持货到付款。' : ''; // eslint-disable-line
return resData;
};
}
/**
/**
*
* 调用接口获取品牌或者店铺的收藏状态
* @private
*/
const getBrandFavStatus = (params) => {
getBrandFavStatus(params) {
if (params.uid === 'undefined') {
params.uid = 0;
}
return api.get('', {
return this.get({
data: {
method: 'app.favorite.isFavorite',
uid: params.uid || 0,
id: params.id,
type: params.type
}
}).then(result => {
return result;
});
};
}
/**
/**
* 获取店铺下面的所有品牌
* @param {int} shopId 店铺id
*/
const getShopBrands = (shopId) => {
return api.get('', {
getShopBrands(shopId) {
return this.get({
data: {
method: 'app.shops.getShopsBrands',
shop_id: shopId
}, {code: 200, cache: true}).then((result) => {
},
param: {code: 200, cache: true}
}).then((result) => {
if (result[0]) {
return result[0].brand_id;
}
});
};
}
/**
/**
* 组织店铺页面数据
* @param {array} data 接口返回的店铺页所需数据
* @param {int} shopId 店铺id
* @param {int} isApp app版本
* @return {shopId: int, appVersion: int}
*/
const _formShopData = (data, shopId, isApp) => {
_formShopData(data, shopId, isApp) {
let formatData = {
shopId: shopId,
appVersion: isApp
... ... @@ -326,8 +345,8 @@ const _formShopData = (data, shopId, isApp) => {
_.forEach(resData, (item) => {
if (item.data) {
spring.push({
url: isApp ? _modifyAppUrl(item.data[0], shopId) :
_modifyWapUrl(item.data[0], shopId),
url: isApp ? this._modifyAppUrl(item.data[0], shopId) :
this._modifyWapUrl(item.data[0], shopId),
springType: helpers.image(item.data[0].src)
});
}
... ... @@ -381,8 +400,8 @@ const _formShopData = (data, shopId, isApp) => {
_.forEach(resData, (item) => {
if (item.data[0]) {
bannerTop.data.push({
url: isApp ? _modifyAppUrl(item.data[0], shopId) :
_modifyWapUrl(item.data[0], shopId),
url: isApp ? this._modifyAppUrl(item.data[0], shopId) :
this._modifyWapUrl(item.data[0], shopId),
src: item.data[0].src
});
}
... ... @@ -404,8 +423,8 @@ const _formShopData = (data, shopId, isApp) => {
_.forEach(resData, cate => {
hotCategory.data.list.push({
url: isApp ? _modifyAppUrl(cate, shopId) :
_modifyWapUrl(cate, shopId),
url: isApp ? this._modifyAppUrl(cate, shopId) :
this._modifyWapUrl(cate, shopId),
src: helpers.image(cate.src),
name: cate.name
});
... ... @@ -514,15 +533,15 @@ const _formShopData = (data, shopId, isApp) => {
formatData.shopId = '';
}
return formatData;
};
}
/**
/**
* 使用基础模板的店铺首页
* @param params
* @param shopInfo
* @returns {*|Promise.<TResult>}
*/
const getBaseShopData = (params, shopInfo) => {
getBaseShopData(params, shopInfo) {
/* tar add 161109 seo-info */
let seoResult = _getBrandShopSeo(params.channel, shopInfo, params);
... ... @@ -533,9 +552,9 @@ const getBaseShopData = (params, shopInfo) => {
let shopId = params.shop_id || shopInfo.shops_id;
return api.all([
_getShopDecorator(shopId),
getShopBrands(shopId)
return this.all([
this._getShopDecorator(shopId),
this.getShopBrands(shopId)
]).then(result => {
if (result[0] && _.has(result[0], 'list')) {
_.forEach(result[0].list, item => {
... ... @@ -564,23 +583,23 @@ const getBaseShopData = (params, shopInfo) => {
}
return finalResult;
});
};
}
/**
/**
* 使用经典模板的店铺首页
* @param {object} req
* @param {int} shopId 店铺id
* @param {int} uid 用户id
* @param {string} isApp app版本
*/
const getShopData = (req, shopId, uid, isApp) => {
getShopData(req, shopId, uid, isApp) {
let shopData = {};
let channel = req.yoho.channel;
let brandData = [];
return _getShopInfo(shopId, uid).then(shopInfoResult => {
return this._getShopInfo(shopId, uid).then(shopInfoResult => {
let seoResult = _getBrandShopSeo(channel, shopInfoResult, req.query);
let seoResult = this._getBrandShopSeo(channel, shopInfoResult, req.query);
/* 基础店铺返回程序内的跳转信号,跳转到基础店铺 */
if (shopInfoResult && shopInfoResult.shop_template_type &&
... ... @@ -590,7 +609,7 @@ const getShopData = (req, shopId, uid, isApp) => {
};
}
return _getShopDecorator(shopId).then(shopDeco => {
return this._getShopDecorator(shopId).then(shopDeco => {
return shopDeco;
}).then(shopDeco => {
let brandBrowseData;
... ... @@ -606,7 +625,7 @@ const getShopData = (req, shopId, uid, isApp) => {
});
return Promise.all([
searchModel.getFilterSearchData({
this.ctx(searchModel).getFilterSearchData({
shop_id: shopId,
type: 'default', // 默认
brand: brandData.join(','),
... ... @@ -632,7 +651,7 @@ const getShopData = (req, shopId, uid, isApp) => {
}
// 店铺分类
return _getShopCategory(shopId, channel).then(shopCategory => {
return this._getShopCategory(shopId, channel).then(shopCategory => {
shopData = _.assign({
shopCategory: shopCategory
... ... @@ -640,7 +659,7 @@ const getShopData = (req, shopId, uid, isApp) => {
// noinspection JSCheckFunctionSignatures
return Object.assign(
_formShopData(shopData, shopId, isApp),
this._formShopData(shopData, shopId, isApp),
shopFilterSearchData,
{
shopId: shopId,
... ... @@ -653,64 +672,68 @@ const getShopData = (req, shopId, uid, isApp) => {
});
});
});
}
};
/**
/**
* 异步判断店铺是否收藏
* @param req
* @param shopId
* @param uid
* @returns {Promise.<TResult>|*}
*/
const getShopFav = (req, shopId, uid) => {
return _getShopInfo(shopId, uid).then(shopInfoResult => {
getShopFav(req, shopId, uid) {
return this._getShopInfo(shopId, uid).then(shopInfoResult => {
return shopInfoResult;
});
};
}
/**
/**
* 根据brandId 获取相关店铺列表
* @param brandId
* @param req
* @return array
*/
const getBrandShops = (domain, req) => {
return api.get('', {
getBrandShops(domain, req) {
return this.get({
data: {
method: 'app.search.li',
query: domain
}, {
},
param: {
code: 200,
cache: true
}
}).then(result => {
if (result.data.shopList && _.isArray(result.data.shopList)) {
let seoResult = _getBrandShopSeo(req.channel, result.data[0], req.query);
let seoResult = this._getBrandShopSeo(req.channel, result.data[0], req.query);
return Object.assign(_processBrandShops(result.data.shopList), {seoResult: seoResult});
return Object.assign(this._processBrandShops(result.data.shopList), {seoResult: seoResult});
} else {
return [];
}
});
};
}
/**
/**
* 收藏
* @param {int} id ID
* @param {int} uid 用户ID
* @param type
* @return array
*/
const setFavorite = (id, uid, type) => {
return api.post('', {
setFavorite(id, uid, type) {
return this.post({
data: {
method: 'app.favorite.add',
fav_id: id,
id: id,
uid: uid,
type: type
}
});
};
}
/**
/**
* 取消收藏
*
* @param {int} id 品牌ID
... ... @@ -718,27 +741,29 @@ const setFavorite = (id, uid, type) => {
* @param type
* @return array
*/
const setFavoriteCancel = (id, uid, type) => {
return api.post('', {
setFavoriteCancel(id, uid, type) {
return this.post({
data: {
method: 'app.favorite.cancel',
fav_id: id,
id: id,
uid: uid,
type: type
}
});
};
}
/**
/**
* 处理店铺品类
* @param params
*/
const getShopCategory = (params) => {
getShopCategory(params) {
let finalResult = {
class: [],
category: []
};
return _getShopCategory(params.shopId, params.channel).then(result => {
return this._getShopCategory(params.shopId, params.channel).then(result => {
let resultCopy = _.cloneDeep(result);
_.forEach(resultCopy, value => {
... ... @@ -780,22 +805,24 @@ const getShopCategory = (params) => {
return finalResult;
});
};
}
/**
/**
* 获取品牌优惠券列表
* @param {[int]} brand_id 品牌id
* @param {[int]} uid 当前用户id,空则不传
* @return {[array]}
*/
const brandCouponsList = (params) => {
brandCouponsList(params) {
if (!params.brand_id || params.brand_id === '' || params.brand_id === 'undefined') {
return Promise.resolve([]);
}
return api.get('', Object.assign({
return this.get({
data: Object.assign({
method: 'app.brand.getBrandIntro'
}, params)).then(result => {
}, params)
}).then(result => {
let shopCoupons = [];
let couPonstatus;
... ... @@ -821,22 +848,5 @@ const brandCouponsList = (params) => {
coupons: shopCoupons
};
});
};
module.exports = {
getBaseShopData,
getShopData,
getBrandShops,
setFavorite,
setFavoriteCancel,
getShopIntro,
getShopBrands,
getShopCategory,
brandCouponsList,
getShopFav,
getBrandFavStatus,
getShopDecorator: _getShopDecorator,
getShopCategoryApi: _getShopCategory,
formShopData: _formShopData,
getBrandShopSeo: _getBrandShopSeo
}
};
... ...