shop.js 4.26 KB
/**
 * Created by PhpStorm.
 * User: Targaryen
 * Date: 2016/7/26
 * Time: 10:34
 */
'use strict';
const logger = global.yoho.logger;
const shopApi = require('./shop-api');
const processProductList = require(`${global.utils}/beautify/product`);
const camelCase = global.yoho.camelCase;
const _ = require('lodash');
const prettyFilter = require(`${global.utils}/beautify/filters`);

/**
 * 获取品牌店铺数据
 * @param params
 * @returns {*|Promise.<TResult>}
 */
const getShopData = params => {
    let finalResult = {};

    return shopApi.getBrandInfoByDomain({
        domain: params.domain
    }).then(result => {

        if (result.data) {

            /* 品牌名称 */
            Object.assign(finalResult, {
                brandName: result.data.brand_name
            });

            /* 品牌是否有店铺 */
            if (result.data.shop_id) {

                /* 是 BLK 的店铺 */
                Object.assign(finalResult, {
                    isBlkShop: true,
                    shopId: result.data.shop_id
                });

                return shopApi.getShopInfoData({
                    shopId: result.data.shop_id,
                    uid: params.uid
                }).then(subResult => {

                    if (subResult.data) {

                        /* 取店铺的基本信息 */
                        Object.assign(finalResult, {
                            shopLogo: subResult.data.shop_logo,
                            shopName: subResult.data.shop_name,
                            shopIntro: subResult.data.shop_intro,
                            isFav: subResult.data.is_favorite === 'Y'
                        });

                        /* 取资源位店铺背景图 */
                        return shopApi.getShopsDecoratorList({
                            shopId: result.data.shop_id
                        }).then(thResult => {
                            if (thResult.data) {
                                _.forEach(thResult.data.list, value => {

                                    if (value.resource_name === 'shopTopBanner_app') {
                                        Object.assign(finalResult, {
                                            shopBg: JSON.parse(value.resource_data).shopSrc
                                        });
                                    }
                                });
                            }

                            return finalResult;
                        });
                    }
                    return finalResult;
                });
            } else {

                /* 不是 BLK 的店铺 */
                Object.assign(finalResult, {
                    isBlkShop: false
                });

                logger.info('brand has no shop');
            }
            return finalResult;
        }

        return finalResult;
    });
};

/**
 * 获取品牌店铺商品数据
 * @param params
 * @returns {*|Promise.<TResult>}
 */
const getBrandShopGoodsData = params => {
    let finalResult = {};

    return shopApi.getBrandInfoByDomain({
        domain: params.domain
    }).then(result => {
        if (result.data) {
            return shopApi.getBrandShopGoodsOriginData(Object.assign(params, {
                brand: result.data.id,
                shopId: result.data.shop_id
            })).then(subResult => {
                if (subResult.data) {
                    prettyFilter(subResult.data.filter);
                    finalResult = {
                        data: {
                            productList: processProductList(subResult.data.product_list, {gender: params.gender}),
                            filter: subResult.data.filter,
                            page: subResult.data.page,
                            pageTotal: subResult.data.page_total
                        },
                        code: 200
                    };
                }
                return camelCase(finalResult);
            });
        }
        return camelCase(finalResult);
    });
};

/**
 * 收藏店铺
 * @param params
 * @returns {*|Promise.<TResult>}
 */
const collectShopData = params => {
    return shopApi.collectShopOriginData(params).then(result => {
        return result;
    });
};

module.exports = {
    getShopData,
    getBrandShopGoodsData,
    collectShopData
};