index.js 8.35 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`);
const _ = require('lodash');

/**
 * [获取作者信息]
 * @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', {

    }, {
        cache: true,
        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: 20
    };

    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));

            // build.push(guangProcess.formatArticle(art, true, isApp, true, 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: 0,
        tag: param.tag ? param.tag : null

        // author_id: param.authorId ? param.authorId : null,
        // limit: param.limit ? param.limit : null
    }, {
        cache: true,
        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: {

            }
        };

        // 顶部的分类列表
        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 && result[1] && result[1].data && result[1].data.list) {

            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;

        }

        if (result && result[1] && result[1].data && result[1].data.list && 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;

    });

};

const getTagEditor = (param) => {

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

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

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

        let resu = {
            guang: {
                tag: param.tag,
                gender: param.gender,
                isApp: param.isApp ? 1 : 0,
                guangList: true
            }
        };

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

            let inf = [];

            let infoList = result[0].data.list.artList;
            infoList.forEach(val => {
                val.colparam = {
                    urlpath: param.path,
                    param: ''
                };
                if (param.tag) {
                    val.colparam.param = `?query=${param.tag}`;
                }
                inf.push(guangProcess.formatArticle(val, true, param.isApp, true));
            });

            resu.guang.infos = inf;

        }

        return resu;

    });

};

/**
 * 获取制指定文章的动态信息
 * @param ids
 * @param udid
 * @param other [Obejct] 包含uid,query,type等非必传参数
 * @returns {Promise.<T>|*}
 */

const getDynamicDataByIds = (ids, udid, other) => {
    let params = {
        articleIds: ids,
        udid: udid
    };

    if (other.uid) {
        _.assign(params, {
            uid: other.uid
        });
    }

    if (other.query) {
        _.assign(params, {
            query: other.query
        });
    }

    if (other.type) {
        _.assign(params, {
            type: other.type
        });
    }

    return serviceAPI.get('guang/api/v6/article/getSimpleArticleList', params, {
        cache: true
    });
};

/**
 * 获取制指定文章的动态信息
 * @param ids
 * @returns {Promise.<T>|*}
 */

const getDynamicDataById = (id, uid, udid) => {
    return serviceAPI.get('guang/api/v6/article/getArticlePraiseAndFavor', {
        id: id,
        uid: uid,
        udid: udid
    });
};

module.exports = {
    getAuthor,
    getArticleList,
    getPageData,
    getArticle,
    getTagEditor,
    getDynamicDataByIds,
    getDynamicDataById
};