plustar.js 10.2 KB
'use strict';
const api = global.yoho.API;
const serviceAPI = global.yoho.ServiceAPI;
const _ = require('lodash');
const logger = global.yoho.logger;
const camelCase = global.yoho.camelCase;
const helpers = global.yoho.helpers;
const htmlProcess = require(`${global.utils}/html-process`);

const privateKeyList = {
    android: 'fd4ad5fcfa0de589ef238c0e7331b585',
    iphone: 'a85bb0674e08986c6b115d5e3a4884fa',
    ipad: 'ad9fcda2e679cf9229e37feae2cdcf80',
    web: '0ed29744ed318fd28d2c07985d3ba633',
    h5: 'fd4ad5fcfa0de589ef238c0e7331b585'
};

const formaData = (data, gender) => {
    let build = [];

    _.forEach(data, function(val) {
        // 多张图
        if (val.data[1]) {
            let imgs = [];

            _.forEach(val.data, function(list) {
                let obj = {};

                obj = _.assign(obj, {
                    url: '/guang/plustar/brandinfo?id=' + val.id + '&gender=' + gender,
                    img: list.src,
                    deps: val.brand_title
                });

                imgs.push(obj);
            });

            build.push({
                imgs: imgs
            });
        }

        // 单张图
        if (val.data[0] && !val.data[1]) {
            _.forEach(val.data, function(list) {
                build.push({
                    url: '/guang/plustar/brandinfo?id=' + val.id + '&gender=' + gender,
                    img: list.src,
                    deps: val.brand_title
                });
            });
        }
    });

    return build;
};

const getContentData = (gender, type, channel, isRecommend) => {
    let param = {
        gender: gender,
        brand_type: type,
        yh_channel: channel
    };

    if (isRecommend) {
        param.is_recommend = isRecommend;
    }

    return serviceAPI.get('guang/api/v3/plustar/getlist', param).then((result) => {
        if (result && result.code === 200) {
            return formaData(result.data.data.list[0].data, gender);
        } else {
            logger.error('list data return code is not 200');
            return {};
        }
    });
};

const getListData = (gender, recom, all) => {
    return Promise.all([getContentData(gender, recom), getContentData(gender, all)]).then((result) => {
        let ps = [];

        if (result[0]) {
            ps.push({
                focus: true,
                name: '设计师',
                list: result[0]
            });
        }

        if (result[1]) {
            ps.push({
                name: '经典潮牌',
                list: result[1]
            });
        }
        return ps;
    });
};

const getBrandsData = (gender, starBrand, originalBrand, channel, isRecommend) => {
    return Promise.all([getContentData(gender, starBrand, isRecommend, channel), getContentData(gender, originalBrand, isRecommend, channel)]).then((result) => {
        let ps = [];

        if (result[1]) {
            ps.push({
                focus: true,
                name: '原创潮牌',
                list: result[1]
            });
        }

        if (result[0]) {
            ps.push({
                name: '明星潮品',
                list: result[0]
            });
        }
        return ps;
    });
};

// 新品到着
const getNewProduct = (brandId, gender, url) => {

    return api.get('', {
        method: 'app.search.li',
        brand: brandId,
        gender: gender,
        limit: 6,
        order: 's_t_desc',
        page: 1
    }).then((result) => {

        if (result && result.code === 200) {

            let newArrival = {
                naList: []
            };

            if (result.data.product_list) {
                _.forEach(result.data.product_list, function(list, index) {
                    let obj = {};
                    let price;

                    if (index <= 5) {
                        let tag = [];

                        if (!list.product_skn) {
                            return false;
                        }

                        if (list.market_price === list.sales_price) {
                            list.market_price = false;
                        }
                        tag.push({
                            is_new: list.is_new === 'Y',
                            is_discount: list.is_discount === 'Y',
                            is_limited: list.is_limited === 'Y',
                            is_yohood: list.is_yohood === 'Y',
                            is_advance: list.is_advance === 'Y'
                        });

                        _.forEach(tag, function(data) {

                            if (data.is_discount === true && list.is_soon_soldOut === true) {
                                data.is_new = true;
                                data.is_discount = false;
                            } else if (data.is_discount === true && (data.is_new === true || data.is_limited === true || data.is_yohood === true || data.is_advance === true)) {
                                data.is_discount = false;
                            } else if (data.is_yohood === true && data.is_new === true) {
                                data.is_new = false;
                            }
                        });

                        if (list.market_price && list.market_price !== false) {
                            price = list.market_price + '.00';
                        }

                        newArrival.moreUrl = url;

                        obj = _.assign(obj, {
                            id: list.product_skn,
                            product_id: list.product_id,
                            thumb: helpers.image(list.default_images, 235, 314),
                            name: list.product_name,
                            salePrice: list.sales_price + '.00',
                            studentPrice: list.sales_price * 0.9,
                            is_soon_sold_out: list.is_soon_sold_out === 'Y',
                            isShowSaleTagDis: list.sales_price * 2 < list.market_price,
                            url: '//m.yohobuy.com/product/pro_' + list.product_id + '_' +
                                list.goods_list[0].goods_id + '/' + list.cn_alphabet + '.html',
                            tags: tag
                        });

                        if (price) {
                            obj = _.assign(obj, {
                                price: price
                            });
                        }

                        newArrival.naList.push(obj);

                    }
                });
            }

            return newArrival;
        } else {
            logger.error('new data return code is not 200');
            return {};
        }
    });
};

// 相关资讯
const getRelatedEditorial = (brandId, uid, udid, clientType, isApp) => {

    return serviceAPI.get('guang/service/v1/article/getArticleByBrand', {
        brand_id: brandId,
        uid: uid,
        udid: udid,
        client_type: clientType,
        limit: 3,
        private_key: privateKeyList[clientType]
    }).then((result) => {

        if (result && result.code === 200) {

            let list = [];

            _.forEach(result.data, function(data) {
                if (isApp) {
                    data.url = data.url + '';
                }

                list.push({
                    id: data.id,
                    url: isApp ? `${helpers.https(data.url)}&openby:yohobuy={"action":"go.h5","params":{"param":{"id":"${data.id}"},"shareparam":{"id":"${data.id}"},"share":"/guang/api/v1/share/guang","id":${data.id},"type":1,"url":"http:${helpers.urlFormat('/info/index', null, 'guang')}","islogin":"N"}}` : data.url,
                    title: data.title,
                    text: data.intro,
                    img: helpers.image(data.src, 640, 640),
                    publishTime: data.publish_time,
                    like: data.like,
                    pageView: data.views_num
                });
            });



            return list;
        } else {
            logger.error('editorial data return code is not 200');
            return {};
        }
    });
};

// 是否收藏
const isCollection = (uid, brandId, clientType) => {
    return serviceAPI.get('shops/service/v1/favorite/getUidBrandFav', {
        uid: uid,
        brandId: brandId,
        client_type: clientType,
        private_key: privateKeyList[clientType]
    }).then((result) => {

        if (result && result.code === 200) {

            let isLike = true;

            return isLike;
        } else {
            let isLike = false;

            return isLike;
        }
    });
};

// 品牌详情
const getDetailData = (id, uid, udid, gender, isApp, clientType) => {

    return serviceAPI.get('guang/api/v1/plustar/getbrandinfo', {
        id: id,
        client_type: clientType
    }).then((result) => {
        if (result && result.code === 200) {

            let list = result.data || [];
            let jumpToApp;

            list = camelCase(list);
            let url;

            let brandId = list.brandId;
            let brandDomain = list.brandDomain;
            let isDifferent = list.isDifferent;

            if (isApp) {
                url = '?openby:yohobuy={"action":"go.brand","params":{"brand_id":"' + brandId + '","is_different":"' + isDifferent + '"}}';
            } else {
                url = '//' + brandDomain + '.m.yohobuy.com';
            }

            if (isApp & !uid) {
                jumpToApp = 1;
            }

            return Promise.all([isCollection(uid, brandId, clientType), getRelatedEditorial(brandId, uid, udid, clientType, isApp), getNewProduct(brandId, gender, url)]).then((resultData) => {

                list = _.assign(list, {

                    isLike: resultData[0],
                    infos: resultData[1],
                    newArrival: resultData[2],
                    jumpToApp: jumpToApp,
                    shareLink: '//guang.m.yohobuy.com/plustar/brandinfo?id=' + id,
                    shareTitle: list.brandName,
                    shareImg: list.brandIco,
                    shareDesc: htmlProcess.removeHtml(list.brandIntro)
                });

                return list;
            });

        } else {
            logger.error('detail data return code is not 200');
            return {};
        }
    });
};

module.exports = {
    getListData,
    getContentData,
    getDetailData,
    getBrandsData
};