Authored by yyq

Merge branch 'feature/shoppingCart' of git.yoho.cn:fe/yohobuy-node into feature/shoppingCart

... ... @@ -4,8 +4,10 @@
'use strict';
const co = require('bluebird').coroutine;
const service = require('../models/cart-service');
const helper = require('../models/cart-helper');
const ghelper = require('../../guang/models/guang-helper');
const simpleHeaderModel = require('../../../doraemon/models/simple-header');
const getProductInfo = (req, res, next) => {
... ... @@ -18,6 +20,27 @@ const getProductInfo = (req, res, next) => {
}).catch(next);
};
/**
* 设置购物车COOKIE信息
*/
const setShoppingCookie = (req) => {
let uid = req.user.uid || true;
let shoppingKey = helper.getShoppingKeyByCookie(req);
return service.getCartCount(uid, shoppingKey).then(ret => {
if (ret && ret.data && ret.data.cart_goods_count) {
req.cookies('_g', {
_k: shoppingKey,
_nac: ret.data.cart_goods_count,
_ac: 0,
_r: 1
});
}
});
};
/**
* 我的购物车
*/
... ... @@ -27,6 +50,10 @@ const cart = (req, res, next) => {
let shoppingKey = helper.getShoppingKeyByCookie(req);
let cartDelList = req.cookies['cart-del-list'];
if (cartDelList) {
req.cookies['cart-del-list'] = '';
}
service.getCartData(uid, shoppingKey, cartDelList)
.then(ret => {
console.log(JSON.stringify(ret));
... ... @@ -48,6 +75,35 @@ const cart = (req, res, next) => {
*/
const cartAdd = () => {
co(function * (){
let uid = req.user.uid;
let shoppingKey = helper.getShoppingKeyByCookie(req);
let productSku = req.body.productSku;
let buyNumber = req.body.buyNumber || 1;
let goodsType = req.body.goodsType || 0;
let promotionId = req.body.promotionId || 0
let isEdit = req.body.isEdit || 0;
let result = yield service.addToCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey);
// 设置加入购物车凭证到客户端浏览器
if(!shoppingKey && result && result.data && result.data.shopping_key) {
// req.cookies['_SPK'] = result.data.shopping_key
//$this->setCookie('_SPK', $result['data']['shopping_key'], time() + 86400 * 360);
}
// 老站购物车需要的COOKIE
if (result && result.data && result.data.shopping_key) {
/*$this->setCookie('_g', json_encode(array(
'_k' => $result['data']['shopping_key'],
'_nac' => $result['data']['goods_count'],
'_ac' => 0,
'_r' => 1
)));*/
}
res.send(result);
});
};
/**
... ... @@ -55,63 +111,162 @@ const cartAdd = () => {
*/
const cartTotal = () => {
};
co(function * (){
/**
* 设置购物车COOKIE信息
*/
const setShoppingCookie = () => {
let uid = req.user.uid;
let shoppingKey = helper.getShoppingKeyByCookie(req);
let callback = req.query.callback;
let ret = yield service.getCartCount(uid, shoppingKey);
return res.send(callback + '(' + JSON.stringify(ret) + ')');
});
};
/**
* 购物车商品选择与取消
*/
const selectProduct = () => {
const selectProduct = (req, res) => {
let uid = req.user.uid;
let productId = req.body.skuList;
let hasPromotion = req.body.hasPromotion || false;
let shoppingKey = helper.getShoppingKeyByCookie(req);
service.selectGoods(uid, productId, shoppingKey, hasPromotion)
.then(ret => {
res.send(ret);
}).catch(() => {
res.send({
code: 400
});
});
};
/**
* 修改购物车商品数量
*/
const modifyProduct = () => {
const modifyProduct = (req, res) => {
let uid = req.user.uid;
let shoppingKey = helper.getShoppingKeyByCookie(req);
let sku = req.body.sku;
let increaseNum = req.body.increaseNum || null;
let decreaseNum = req.body.decreaseNum || null;
return service.modifyProductNum(uid, sku, increaseNum, decreaseNum, shoppingKey)
.then(ret => {
if (ret && ret.code === 200) {
return setShoppingCookie().then(() => {
return res.send(ret);
});
}
})
.catch(next);
};
/**
* 移出购物车
*/
const removeProduct = () => {
const removeProduct = (req, res) => {
co(function * (){
let uid = req.user.uid;
let shoppingKey = helper.getShoppingKeyByCookie(req);
let skuList = req.body.skuList;
let hasPromotion = true;
let ret = yield service.removeFromCart(uid, shoppingKey, skuList, hasPromotion);
if(ret && ret.code === 200) {
yield setShoppingCookie();
}
return res.send(ret);
});
};
/**
* 移入收藏夹
* 支持批量移入收藏夹
*/
const moveToFav = () => {
const moveToFav = (req, res) => {
co(function * (){
let uid = req.user.uid;
// let shoppingKey = helper.getShoppingKeyByCookie(req);
let skuList = req.body.skuList;
let hasPromotion = req.body.hasPromotion || false;
let ret = yield service.addToFav(uid, skuList, hasPromotion);
if(ret && ret.code === 200) {
yield setShoppingCookie();
}
return res.send(ret);
});
};
/**
* 检查是否收藏
*/
const checkFav = () => {
const checkFav = (req, res) => {
co(function * (){
let uid = req.user.uid;
let pids = req.body.pidList;
let ret = {
code: 200,
message: '是否收藏',
data: {}
};
ret.data = yield service.checkUserIsFav(uid, pids);
return res.send(ret);
});
};
/**
* 凑单商品异步请求
*/
const getTogetherProduct = () => {
const getTogetherProduct = (req, res) => {
co(function * (){
let page = req.query.page;
/*let ret = {
code: 200,
message: '凑单商品'
};*/
ret = yield service.getTogetherProduct(page);
return res.send(ret);
});
};
/**
* 为你优选商品异步请求
*/
const getRecommendProductAction = () => {
const getRecommendProductAction = (req, res) => {
co(function * (){
let channel = req.yoho.channel;
let uid = req.user.uid;
let udid = ghelper.getUdid(req, res);
let page = req.query.page;
if(page === '6') {
page = 1;
}
let ret = yield service.getRecommendProduct(channel, uid, udid, page);
res.send(ret);
});
};
module.exports = {
... ...
... ... @@ -384,7 +384,92 @@ const getCartData = (uid, shoppingKey, cartDelList) => {
});
};
const getCartCount = (uid, shoppingKey) => {
return Promise.resolve({
uid,
shoppingKey
});
};
const addToCart = (productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey) => {
return Promise.resolve({
productSku,
buyNumber,
goodsType,
isEdit,
promotionId,
uid,
shoppingKey
});
};
const selectGoods = (uid, productId, shoppingKey, hasPromotion) => {
return Promise.resolve({
uid,
productId,
shoppingKey,
hasPromotion
});
};
const modifyProductNum = (uid, sku, increaseNum, decreaseNum, shoppingKey) => {
return Promise.resolve({
uid,
sku,
increaseNum,
decreaseNum,
shoppingKey
});
};
const removeFromCart = (uid, shoppingKey, skuList, hasPromotion) => {
return Promise.resolve({
uid,
shoppingKey,
skuList,
hasPromotion
});
};
const addToFav = (uid, skuList, hasPromotion) => {
return Promise.resolve({
uid,
skuList,
hasPromotion
});
};
const checkUserIsFav = (uid, pids) => {
return Promise.resolve({
uid,
pids
});
};
const getRecommendProduct = (channel, uid, udid, page) => {
return Promise.resolve({
channel,
uid,
udid,
page
});
};
module.exports = {
getProductInfoAsync, // 获取某一个商品详情主页面
getCartData
getCartData,
getCartCount,
addToCart,
selectGoods,
modifyProductNum,
removeFromCart,
addToFav,
checkUserIsFav,
getRecommendProduct
};
... ...