favorite.js 8.64 KB
/**
 * 我的收藏
 * @author: jiangfeng<jeff.jiang@yoho.cn>
 * @date: 2016/7/19
 */

'use strict';

const _ = require('lodash');
const camelCase = global.yoho.camelCase;
const config = global.yoho.config;
const mcHandler = require('../models/menu-crumb-handler');
const FavoriteData = require('../models/favorite');

const favorite = {
    // 商品收藏页
    goods(req, res, next) {
        let q = req.query;
        let page = parseInt(q.page || 1, 10);
        let uid = req.user.uid;
        let sort = q.sort ? parseInt(q.sort, 10) : '';
        let ret = {
            module: 'me',
            page: 'favorite',
            title: '我的收藏',
            isMe: true,
            content: {
                nav: mcHandler.getMeCrumb('我的收藏'),
                navigation: mcHandler.getSideMenu('我的收藏'),
                banner: 'http://placehold.it/150x120',
                collection: true,
                favorite: {
                    product: true,
                    title: '我的收藏'
                }
            }
        };

        Promise.all([FavoriteData.getFavoriteProduct({
            page: 1,
            limit: 500,
            uid: uid
        }), mcHandler.getMeThumb()]).then(result => {
            let thumb = result[1];

            if (result[0] && result[0].code === 200 && result[0].data) {
                let data = camelCase(result[0].data);
                let retData = {
                    siteUrl: config.siteUrl
                };

                retData.total = data.total;
                retData.paginationData = {
                    page: page,
                    limit: 16,
                    total: data.total,
                    pageTotal: (data.total % 16 === 0 ? data.total / 16 : data.total / 16 + 1),
                    queryParams: q
                };

                retData.categoryList = data.categoryList;

                retData.categoryList.unshift({
                    categoryId: '',
                    categoryName: '全部商品',
                    num: data.total
                });

                retData.categoryList.forEach(c => {
                    c.checked = c.categoryId === sort;
                });

                retData.products = data.productList.filter(p => {
                    return !sort || sort === p.categoryId;
                }).slice((page - 1) * 16, page * 16);

                retData.products.forEach(p => {
                    if (p.status === 0) {
                        p.stateText = '已下架';
                        p.hideBtn = true;
                    } else if (p.storage === 0) {
                        p.stateText = '已售罄';
                        p.hideBtn = true;
                    }
                    p.url = `/product/pro_${p.productId}_${p.goodsId}/${p.cnAlphabet}.html`;
                    p.imageUrl = p.image.replace('imageMogr2', 'imageMogr1');
                });

                ret.content.favorite.data = retData;
                ret.content.banner = thumb;
            }

            res.display('index', ret);
        }).catch(next);
    },

    // 品牌收藏页
    brand(req, res, next) {
        let q = req.query;
        let page = parseInt(q.page || 1, 10);
        let uid = req.user.uid;
        let limit = 5;
        let ret = {
            module: 'me',
            page: 'favorite.brand',
            title: '我的收藏',
            isMe: true,
            content: {
                nav: mcHandler.getMeCrumb('我的收藏'),
                navigation: mcHandler.getSideMenu('我的收藏'),
                banner: 'http://placehold.it/150x120',
                collection: true,
                favorite: {
                    brand: true,
                    title: '我的收藏'
                }
            }
        };

        Promise.all([FavoriteData.getFavoriteBrand({
            page: page,
            limit: limit,
            uid: uid
        }), mcHandler.getMeThumb()]).then(result => {
            let thumb = result[1];

            if (result[0] && result[0].code === 200 && result[0].data) {
                let data = camelCase(result[0].data);
                let retData = {
                    siteUrl: config.siteUrl
                };

                retData.total = data.total;
                retData.paginationData = {
                    page: page,
                    limit: limit,
                    total: data.total,
                    pageTotal: data.pageTotal,
                    queryParams: q
                };
                retData.brandList = data.brandList;

                if (retData.brandList) {
                    _.each(retData.brandList, b => {

                        if (b.newProduct && b.newProduct.length > 0) {
                            b.newProduct.forEach(p => {
                                p.url = `${config.siteUrl}/product/pro_${p.productId}_${p.goods[0].id}/${p.cnAlphabet}.html`; // eslint-disable-line
                            });
                            b.newProduct.push({
                                more: true
                            });
                            b.newProduct = _.chunk(b.newProduct, 4);
                        } else {
                            b.noNewProduct = true;
                        }
                    });
                }
                ret.content.favorite.data = retData;
                ret.content.banner = thumb;
            }

            res.display('index', ret);
        }).catch(next);
    },

    // 资讯收藏页
    editorial(req, res, next) {
        let q = req.query;
        let page = parseInt(q.page || 1, 10);
        let uid = req.user.uid;
        let limit = 5;
        let ret = {
            module: 'me',
            page: 'favorite.editorial',
            title: '我的收藏',
            isMe: true,
            content: {
                nav: mcHandler.getMeCrumb('我的收藏'),
                navigation: mcHandler.getSideMenu('我的收藏'),
                banner: 'http://placehold.it/150x120',
                collection: true,
                favorite: {
                    editorial: true,
                    title: '我的收藏'
                }
            }
        };

        Promise.all([FavoriteData.getFavoriteEditoreial({
            uid: uid,
            page: page,
            limit: limit
        }), mcHandler.getMeThumb()]).then(result => {
            let thumb = result[1];

            if (result[0] && result[0].code === 200 && result[0].data) {
                let data = camelCase(result[0].data);
                let retData = {
                    siteUrl: config.siteUrl,
                    editorialList: data.data
                };

                _.forEach(retData.editorialList, function(val) {
                    val.publishTime = val.publishTime.replace(/年|月/g, '/');
                    val.publishTime = val.publishTime.replace(/日/g, '');
                });


                retData.total = data.total;
                retData.paginationData = {
                    page: page,
                    limit: limit,
                    total: data.total,
                    pageTotal: data.totalPage,
                    queryParams: q
                };

                ret.content.favorite.data = retData;
                ret.content.banner = thumb;
            }
            res.display('index', ret);
        }).catch(next);
    },

    // 取消商品、店铺收藏
    cancel(req, res, next) {
        let type = req.body.type;
        let ids = req.body.ids;
        let uid = req.user.uid;

        FavoriteData.cancelFavorite(uid, ids, type).then(result => {
            if (result && result.code === 200) {
                res.json({code: 200});
            } else {
                res.json({code: 400});
            }
        }).catch(next);
    },

    // 取消商品、店铺收藏
    cancelMulti(req, res, next) {
        let shops = req.body.shops;
        let brands = req.body.brands;
        let uid = req.user.uid;

        let promises = [];

        if (shops) {
            promises.push(FavoriteData.cancelFavorite(uid, shops, 'shop'));
        }

        if (brands) {
            promises.push(FavoriteData.cancelFavorite(uid, brands, 'brand'));
        }

        Promise.all(promises).then(() => {
            res.json({code: 200});
        }).catch(next);
    },

    // 取消资讯收藏
    editorialCancel(req, res, next) {
        let ids = req.body.ids;
        let uid = req.user.uid;

        FavoriteData.cancelEditorialFavorite(uid, ids).then(result => {
            if (result && result.code === 200) {
                res.json({code: 200});
            } else {
                res.json({code: 400});
            }
        }).catch(next);
    }
};

module.exports = favorite;