plusstar.js 6.33 KB
'use strict';
const _ = require('lodash');
const productProcess = require('../../../utils/product-process');

module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    /**
     * 获取潮流优选tab
     * @return {[array]}
     */
    getAllChannels(params) {
        let gender = params.gender - 1 || 0;

        return this.get({
            data: {
                method: 'app.blk.getAllChannels',
                app_type: params.app_type
            },
            api: global.yoho.API,
            param: {cache: true}
        }).then(result => {
            let data = {channel: []};

            if (result.code !== 200) {
                return data;
            }

            if (gender === 3 && result.data.length === 3) {
                // 1:男,2:女,3:童装,4:创意生活
                // 如果为3,说明童装没有配置,只配置了创意生活。所以要减一
                gender = 2;
            }

            _.forEach(result.data, (res, index) => {
                data.channel.push({
                    id: res.channel_id,
                    mame: res.channel_name,
                    code: res.content_code,
                    focus: index === gender ? true : false
                });
            });

            return data;
        });
    }

    /**
     * 通过skn查询商品详情
     * @param {[string || array]} productSkn 商品skn
     * @return {[array]}
     */
    getProductBatch(param, options) {
        param.productSkn = _.isArray(param.productSkn) ? param.productSkn : [param.productSkn];
        return this.get({
            data: {
                method: 'h5.product.batch',
                productSkn: param.productSkn.join(','),
                yh_channel: param.yh_channel,
                page: param.page,
                limit: param.limit
            },
            api: global.yoho.API,
            param: {cache: true}
        }).then(result => {
            let data = {};

            if (result && result.data) {
                data = {
                    page_total: result.data.page_total,
                    product_list: productProcess.processProductList(result.data.product_list, options)
                };
            }
            return data;
        });
    }

    /**
     * 商品推荐获取
     * @param {[int]} yh_channel 当前频道
     * @param {[int]} uid 用户id
     * @return {[array]}
     */
    getFashionPrefer(params) {
        return this.get({
            data: Object.assign({
                method: 'h5.product.fashionPrefer'
            }, params),
            api: global.yoho.API
        });
    }

    /**
     * 获取资源位数据
     * @param {[string]} content_code
     * @return {[array]}
     */
    getResources(params, options) {
        params = params || {};

        if (options.isApp) {
            params.platform = 'iphone';
        }
        return this.get({
            url: 'operations/api/v5/resource/get',
            data: params,
            api: global.yoho.ServiceAPI,
            param: {cache: true}
        }).then(result => {
            let data = {
                goods: {},
                recommend: {}
            };
            let list = {};
            let productSkns = [];

            if (result && result.code !== 200) {
                return data;
            }

            _.forEach(result.data, (res) => {
                list = {};
                switch (res.template_name) {
                    case 'focus':
                        list = {
                            data: res.data
                        };

                        if (res.focus_type * 1 === 1) {
                            data.focus1 = list;
                            data.focus1.id = res.template_id;
                        } else {
                            data.focus2 = list;
                            data.focus2.id = res.template_id;
                        }

                        break;
                    case 'title_image' :
                        if (typeof data[res.template_name] === 'undefined') {
                            data[res.template_name] = [];
                        }

                        list = {
                            id: res.template_id,
                            title: res.data.title,
                            moreUrl: res.data.more_url,
                            moreName: res.data.more_name,
                            image: res.data.image
                        };

                        data.title_image.push(list);
                        break;
                    case 'titleFloor':
                        list = {
                            name: res.data.title.name,
                            moreUrl: res.data.title.more_url,
                            moreName: res.data.title.more_name
                        };

                        if (res.data.title.name === '热门商品') {
                            data.goods.title = list;
                            data.goods.id = res.template_id;
                        } else if (res.data.title.name === '热门品类') {
                            data.recommend.title = list;
                            data.recommend.id = res.template_id;
                        }

                        break;
                    case 'recommend_content_five':
                        data.recommend.data = res.data.list;
                        break;
                    case 'goods':
                        _.forEach(res.data, (skn) => {
                            productSkns.push(skn.id);
                        });

                        data[res.template_name].productSkns = productSkns;
                        break;
                    default:
                        break;
                }
            });

            return data;
        });
    }

    getResourcesData(params, options) {
        return Promise.all([
            this.getResources(params, options),
            this.getFashionPrefer(params)
        ]).then(result => {
            let skns = result[0] && result[0].goods && result[0].goods.productSkns || [];
            let preferSkns = result[1] && result[1].data || [];

            if (result[0] && result[0].goods && result[0].goods.productSkns) {
                result[0].goods.productSkns = _.uniq(skns.concat(preferSkns));
            }

            return result[0];
        });
    }
};