brands-model.js 5.85 KB

/**
 * 品牌一览 model
 * @author: ghw<hongwei.gao@yoho.cn>
 * @date: 2016/9/29
 */
'use strict';

const Promise = require('bluebird');
const co = Promise.coroutine;
const _ = require('lodash');
const helpers = global.yoho.helpers;
const brandApi = require('./brands-api');

// 品牌一览资源位CODE码
const channelCode = {
    boys_brand: '8b16b7baf9a66fbe553a6caa97d2ce2a',
    girls_brand: 'c95ae9e40f0add10549b819f821ad626',
    kids_brand: 'c575c6bfdfa4125fae7d24bbec7119c8',
    lifestyle_brand: '84b7926282fdef92f1039bdcf77c18ba',
    brand_list: 'f0f72b1e8f30e6ad086dfc4401f3a856', // 品牌列表资源位CODE码
    brand_plusstar_banner_boys: 'd0149783b8dd2adaf083fd10556c39a9',
    brand_plusstar_banner_girls: 'd0149783b8dd2adaf083fd10556c39a9',
    brand_plusstarindex_boys: 'a833aed63d28457156310e97faa7fa37', // plusstarindex男首资源位
    brand_plusstarindex_girls: '6e4f162be3b3ba44f3bfcf1c38bdb745' // plusstarindex女首资源位
};
const BOYS = 'boys';
const GIRLS = 'girls';
const KIDS = 'kids';
const LIFESTYLE = 'lifestyle';

/**
 * 获取品牌一览资源位&channelType
 *
 * @param string $channelStr
 * @return array
 */
const switchBrandParams = channel => {
    let req = {};

    switch (channel) {

        case BOYS:
            req = {
                channelType: 1,
                brandCode: channelCode.brand_plusstar_banner_boys
            };
            break;
        case GIRLS:
            req = {
                channelType: 2,
                brandCode: channelCode.brand_plusstar_banner_girls
            };
            break;
        case KIDS:
            req = {
                channelType: 3,
                brandCode: channelCode.kids_brand
            };
            break;
        case LIFESTYLE:
            req = {
                channelType: 4,
                brandCode: channelCode.lifestyle_brand
            };
            break;
        default:
            req = {
                channelType: 1,
                brandCode: channelCode.boys_brand
            };
            break;
    }
    return req;
};

/**
 * 获取品牌一览页面,品牌top
 * @param string $channel 频道名称
 */
const getBrandViewTop = channel => {
    return co(function*() {
        let switchParams = switchBrandParams(channel);

        let res = yield brandApi.getBrandTopData(switchParams.brandCode);

        let result = {},
            brandAds = [],
            brandLogos = [];

        // 头部10个品牌小图块 url
        if (res.data[1].data && res.data[1].data.list) {
            _.forEach(res.data[1].data.list, subValue => {
                brandAds.push({
                    name: subValue.name,
                    src: helpers.image(subValue.src, 80, 50, 3),
                    url: helpers.urlFormat(subValue.url)
                });
            });
        }

        // 头部品牌图块,广告位
        if (res.data[0].data) {
            _.forEach(res.data[0].data, subValue => {
                let srcUrl;

                // kids lifestyle 第一张图尺寸不同
                if (switchParams.channelType === 1 || switchParams.channelType === 2) {
                    srcUrl = helpers.image(subValue.src, 222, 180, 3);
                } else {
                    srcUrl = (subValue === 0) ? helpers.image(subValue.src, 570, 280, 3) :
                        helpers.image(subValue.src, 280, 280, 3);
                }
                brandLogos.push({
                    name: subValue.title,
                    src: srcUrl,
                    url: helpers.urlFormat(subValue.url)
                });
            });
        }

        // 整合brandTop数据结构,boys、girls
        if (switchParams.channelType === 1 || switchParams.channelType === 2) {
            result.isTab = true;
        }
        result.tabHeader = brandLogos;
        result.logos = brandAds;

        return result;
    })();
};

/*
 * 获取品牌一览list
 * @param string $channel 频道名称
 * @param int start  开始位置 1 开始
 * @param int length 取数长度 0 取到最后
 */
const getBrandViewList = (channel, start, length) => {
    return co(function*() {

        let switchParams = switchBrandParams(channel);

        let res = yield brandApi.getBrandListData(switchParams.brandCode);

        let result = [],
            navigation = [];

        // 品牌list A-Z 0-9
        if (res.data.brands) {

            _.forEach(res.data.brands, (subValue, key) => {
                // if(_.isEmpty(subValue)){
                //     continue;
                // }
                let listTmp = [];

                _.forEach(subValue, ssubValue => {
                    // 为品牌名称
                    let href;

                    if (switchParams.channelType === 1) {
                        href = helpers.urlFormat(ssubValue.brand_domain) + '?gender=1,3';
                    } else if (switchParams.channelType === 2) {
                        href = helpers.urlFormat(ssubValue.brand_domain) + '?gender=2,3';
                    } else {
                        href = helpers.urlFormat(ssubValue.brand_domain);
                    }

                    listTmp.push({
                        name: ssubValue.brand_name,
                        key: ssubValue.id,
                        href: href,
                        hot: ssubValue.is_hot === 'Y' ? 'hot' : ''
                    });

                });
                navigation.push(key);

                result.push({
                    key: key,
                    val: listTmp
                });
            });

        }

        // 只取部分数据
        let begin;

        begin = (start - 1) ? (start - 1) : 0;
        begin = (begin > 0) ? begin : 0;
        result = length ? result.slice(begin, length + begin) : result.slice(begin);
        result.navigation = navigation;

        return result;
    })();
};

module.exports = {
    getBrandViewTop,
    getBrandViewList
};