index.js 2.98 KB
/**
 * 频道页 model
 * @author: 赵彪<bill.zhao@yoho.cn>
 * @date: 2016/07/26
 */
'use strict';

const channelApi = require('./channel-api');
const floorDataHandler = require('./floor-data-handler');
const _ = require('lodash');


/**
 * 获取模板名为single_image的数据
 * @param {Object} d 接口返回的楼层数据
 * @return {Object} 处理之后的数据
 */
const _processSingleImage = (d) => {
    return floorDataHandler.getAdBanner(d);
};

/**
 * 获取模板名为focus的数据
 * @param {Object} d 接口返回的楼层数据
 * @return {Object} 处理之后的数据
 */
const _processFocus = (d) => {
    return floorDataHandler.getSliderData(d);
};

/**
 * 获取模板名为blk_brand的数据
 * @param {Object} d 接口返回的楼层数据
 * @return {Object} 处理之后的数据
 */
const _processBlkBrand = (d) => {
    let len;

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

    len = d.list.length;

    if (len === 2) {
        return floorDataHandler.getBrandAdFloor(d);
    } else if (len === 4) {
        return floorDataHandler.getStyleIcon(d);
    }
};

/**
 * 获取模板名为image_list的数据
 * @param {Object} d 接口返回的楼层数据
 * @return {Object} 处理之后的数据
 */
const _processImageList = (d) => {
    let len;

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

    len = d.list.length;

    if (len === 4) {
        return floorDataHandler.getNewArrivals(d);
    } else if (len === 5) {
        return floorDataHandler.getEditorial(d);
    }
};

/**
 * 获取模板名为recommend_content_five的数据
 * @param {Object} d 接口返回的楼层数据
 * @return {Object} 处理之后的数据
 */
const _processRecommendContentFive = (d) => {
    return floorDataHandler.getClassicBrands(d);
};


// 根据templete_name字段找到不同的处理方法
const templateMap = {
    single_image: _processSingleImage,
    blkBrand: _processBlkBrand,
    image_list: _processImageList,
    focus: _processFocus,
    recommend_content_five: _processRecommendContentFive
};


/**
 * 获取用于渲染模板的数据
 * @param {Object} d 接口返回的数据
 * @return {Array} 模板数据数组
 */
const _processFloorData = d => {
    let floorList = [];

    _.forEach(d, data => {
        let floorData;

        if (!data.data) {
            return false;
        }

        if (templateMap[data.template_name]) {
            floorData = templateMap[data.template_name](data.data);
        }

        floorList.push(floorData);
    });

    return floorList;
};

/**
 * 获取楼层数据
 * @param {String} type 当前的频道
 * @return {Object}  完整的楼层数据
 */
const getContent = type => {
    return channelApi.getChannelDataAsync(type).then(result => {
        if (result.data && result.data.list) {
            const l = result.data.list;// camelCase(result.data.list);
            const floor = {
                content: _processFloorData(l)
            };

            return floor;
        }
    });
};

module.exports = {
    getContent: getContent
};