index.js 7.16 KB
/**
 * 逛models
 * @author: chenfeng<feng.chen@yoho.cn>
 * @date: 2016/09/07
 */
'use strict';
const serviceAPI = global.yoho.ServiceAPI;
const api = global.yoho.API;
const logger = global.yoho.logger;
const helpers = global.yoho.helpers;
const guangProcess = require(`${global.utils}/guang-process`);

/**
 * [获取作者信息]
 * @param  {[int]} id [作者id]
 * @return {[object]}
 */
const _getAuthor = (id) => {
    return serviceAPI.get('guang/service/v1/author/getAuthor', {
        author_id: id
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            return result;
        } else {
            logger.error('getAuthor code no 200');
            return {};
        }
    });
};


/**
 * 逛分类
 */
const _category = () => {
    return serviceAPI.get('/guang/api/v1/category/get', {

    }, {

        code: 200
    });
};

/**
 * [逛内容列表]
 * @param  {[string]} gender  ["1,3"表示男, "2,3"表示女, "1,2,3"表示所有]
 * @param  {[int]} sortId [分类ID]
 * @param  {Number} uid [用户ID]
 * @param  {String} udid [客户端唯一标识]
 * @param  {Number} page [分页第几页, 默认第1页]
 * @param  {[string]} tag [标签]
 * @param  {[int]} authorId [作者ID]
 * @param  {[int]} limit [返回的限制数]
 * @param  {Boolean} useCache [是否使用缓存]
 * @return {[array]}
 */
const _getArticleList = (gender, sortId, uid, udid, page, tag, authorId, limit, useCache) => {
    let param = {
        page: page || 1,
        uid: uid || 0,
        udid: udid || '',
        gender: gender || '',
        sort_id: sortId,
        tag: tag,
        author_id: authorId,
        limit: limit
    };

    return serviceAPI.get('guang/api/v2/article/getList', param, {
        cache: useCache
    }).then((result) => {
        if (result && result.code === 200) {
            return result;
        } else {
            logger.error('getAuthor code no 200');
            return [];
        }
    });

};

/**
 * [获取切换逛类别或者分页时的文章数据]
 * @param  {[string]}  gender     ["1,3"表示男, "2,3"表示女]
 * @param  {[int]}  sortId     [分类ID]
 * @param  {[int]}  uid        [用户ID]
 * @param  {[string]}  udid       [客户端唯一标识]
 * @param  {[int]}  page       [分页第几页, 默认第1页]
 * @param  {[string]}  tag        [标签]
 * @param  {[string]}  authorId   [作者ID]
 * @param  {Boolean} isApp      [是否是APP]
 * @param  {[Boolean]}  showAuthor [是否显示作者]
 * @param  {Boolean} isTab      [是否为tab切换操作]
 * @return {[array]}
 */
const _getPageData = (gender, sortId, uid, udid, page, tag, authorId, isApp, showAuthor, isTab) => {
    return _getArticleList(gender, sortId, uid, udid, page, tag, authorId).then(article => {
        let result = {};

        if (!article.data.list.artList) {
            return result;
        }

        let adList = article.data.list.adlist;

        // 广告列表
        if (isTab && adList) {
            let build = [];

            adList.forEach(ad => {
                build.push({
                    url: guangProcess.getFilterUrl(ad.url),
                    img: helpers.image(ad.src, 830, 327)
                });
            });
            result.swiper = build;
        }

        /* 构建资讯文章内容 */
        let build = [];
        let artList = article.data.list.artList;

        artList.forEach(art => {
            build.push(guangProcess.formatArticle(art, true, isApp, showAuthor, uid));
        });
        result.infos = build;
        return result;
    });
};

/**
 * 逛内容列表
 */
const _article = (param) => {
    return serviceAPI.get('/guang/api/v2/article/getList', {
        gender: param.gender,
        page: param.page || 1,
        uid: param.uid,
        udid: param.udid,
        sort_id: param.type ? param.type : 1,
        tag: param.tag ? param.tag : null,
        author_id: param.authorId ? param.authorId : null,
        limit: param.limit ? param.limit : null,
    }, {
        code: 200
    }).then(result => {

        return result;

    });
};


/**
 * 逛
 * @param params
 */
const getArticle = (param) => {

    let page = param.page ? param.page : 1;

    Object.assign(param, { page: page });

    return api.all([
        _category(),
        _article(param)
    ]).then(result => {

        let type = param.type;

        let resu = {
            guang: {
                swiper: true
            }
        };


        // 顶部的分类列表
        let curIndex = 0;// 当前tab顺序

        let indexTmp = 0;

        if (result[0] && result[0].data) {

            indexTmp = 0;

            let cateList = result[0].data;

            let build = [];

            let inf = [];

            cateList.forEach(val => {
                build.push({
                    typeId: val.id,
                    type: val.name,
                    focus: (val.id == type)
                });

                inf.push({
                    show: (val.id == type),
                    typeId: type,
                    info: []
                });

                if ((val.id == type)) {
                    curIndex = indexTmp;
                }

                indexTmp++;

                resu.guang.navs = build;

                resu.guang.infos = inf;

            });

        }

        if (result[1].data.list.adlist) {

            let swp = [];

            let swiperList = result[1].data.list.adlist;


            swiperList.forEach(val => {
                swp.push({
                    url: guangProcess.getFilterUrl(val.url),
                    img: helpers.image(val.src, 640, 275)
                });
            });

            resu.guang.swiper = swp;

            // console.log(resu);

        }

        if (result[1].data.list.artList) {

            let inf = [];

            let infoList = result[1].data.list.artList;

            infoList.forEach(val => {
                inf.push(guangProcess.formatArticle(val, true, false, true));
            });

            resu.guang.infos[curIndex].info = inf;

        }

        return resu;
    });

};

/**
 * 逛切换
 * @param params
 */
const getArticleGroup = (param) => {

    let page = param.page ? param.page : 1;

    Object.assign(param, { page: page });

    return api.all([
        _category(),
        _article(param)
    ]).then(result => {

        let type = param.type;

        let resu = {
            guang: {

            }
        };

        if (result[0] && result[0].data) {

            let cateList = result[0].data;

            let build = [];

            let inf = [];

            cateList.forEach(val => {
                build.push({
                    typeId: val.id,
                    type: val.name,
                    focus: (val.id == type)
                });

                inf.push({
                    show: (val.id == type),
                    typeId: type,
                    info: []
                });



                resu.guang.navs = build;

                resu.guang.infos = inf;

            });

        }


        return resu;
    });

};


module.exports = {
    getAuthor: _getAuthor,
    getArticleList: _getArticleList,
    getPageData: _getPageData,
    getArticle,
    getArticleGroup
};