star.js 5.42 KB
/**
 * 新潮教室
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/05/30
 */
'use strict';
const library = '../../../library';
const utils = '../../../utils';
const resourcesProcess = require(`${utils}/resources-process`);
const ServiceAPI = require(`${library}/api`).ServiceAPI;
const API = require(`${library}/api`).API;
const sign = require(`${library}/sign`);
const logger = require(`${library}/logger`);
const camelCase = require(`${library}/camel-case`);
const helpers = require(`${library}/helpers`);
const _ = require('lodash');
const serviceAPI = new ServiceAPI();
const api = new API();

const contentCode = {
    special: '89cc20483ee2cbc8a716dcfe2b6c7603'
};

/**
 * 获取资源位数据
 * @param  {[string]} page
 * @return {[array]}
 */
const getResources = (page) => {
    return serviceAPI.get('operations/api/v5/resource/get', sign.apiSign({
        content_code: contentCode[page]
    })).then((result) => {
        if (result && result.code === 200) {
            return resourcesProcess(result.data);
        } else {
            logger.error('星潮教室页面资源位返回 code 不是 200');
            return [];
        }
    });
};


/**
 * 星潮教室首页数据处理
 * @param  {[array]} list
 * @return {[array]}
 */
const processIndexData = (list) => {
    const formatData = {
        ads: [],
        starAvatar: [],
        articles: []
    };

    list = list || {};
    list = camelCase(list);

    // 首页资源位数据处理
    _.forEach(list.ads.data, (data) => {
        formatData.ads.push({
            src: data.src,
            url: data.url
        });
    });

    // 首页明星文章数据处理
    _.forEach(list.list, (data) => {
        const avatar = {
            tags: []
        };

        if (data.ext.tags.length > 1) {
            avatar.isSwiper = true;
        }

        _.forEach(data.ext.tags, (tags) => {
            avatar.tags.push({
                avatarUrl: `/guang/star/detail?tag=${tags.tagName}`,
                cover: tags.cover,
                tagName: tags.tagName
            });
        });

        formatData.articles.push(_.merge({
            id: data.id,
            url: data.url,
            title: data.title,
            articeTxt: data.intro,
            src: data.src,
            publishTime: helpers.dateFormat('MM月DD日 hh:mm', data.publishTime),
            viewsNum: data.viewsNum
        }, avatar));
    });

    // 首页明星头像数据处理
    _.forEach(list.tags, (data) => {
        let url = `/guang/star/detail?tag=${data.tagName}`;

        formatData.starAvatar.push({
            url: url,
            cover: data.cover
        });
    });

    return formatData;
};


/**
 * 明星专题列表数据处理
 * @param  {[array]} list
 * @return {[array]}
 */
const processDetailData = (list) => {
    const formatData = [];

    list = list || [];
    list = camelCase(list);

    _.forEach(list, (data) => {
        data.publishTime = helpers.dateFormat('MM月DD日 hh:mm', data.publishTime);
        formatData.push(data);
    });

    return formatData;
};


/**
 * 星搭配文章列表数据处理
 */
const processCollocationData = (list) => {
    const formatData = [];

    list = list || [];
    list = camelCase(list);

    _.forEach(list, (data) => {
        if (data.isFavor === 'N') {
            data.isCollected = false;
        } else {
            data.isCollected = true;
        }
        formatData.push(data);
    });

    return formatData;
};

/**
 * 星潮首页
 */
exports.getIndexData = () => {
    return api.get('', sign.apiSign({
        method: 'app.starClass.index',
        code: '8adc27fcf5676f356602889afcfd2a8e'
    })).then((result) => {
        if (result && result.code === 200) {
            return processIndexData(result.data);
        } else {
            logger.error('星潮教室首页数据返回 code 不是 200');
            return {};
        }
    });
};

/**
 * 明星专题
 */
exports.getDetailData = (params) => {
    return api.get('', sign.apiSign({
        method: 'app.starClass.lastTagArticle',
        tag: params.tag,
        page: params.page || 1,
        size: 10
    })).then((result) => {
        if (result && result.code === 200) {
            if (params.page > result.data.totalPage) {
                return '';
            } else {
                return processDetailData(result.data.list);
            }
        } else {
            logger.error('明星专题文章数据返回 code 不是 200');
            return [];
        }
    });
};


/**
 * 星专题
 */
exports.getSpecialData = () => {
    return getResources('special');
};

/**
 * 星搭配
 */
exports.getCollocationListData = (params, uid) => {

    return serviceAPI.get('guang/api/v5/article/getStarClassroomArticleList', sign.apiSign(Object.assign({
        limit: '20',
        uid: uid
    }, params))).then((result) => {
        if (result && result.code === 200) {
            return processCollocationData(result.data.list.artList);
        } else {
            logger.error('获取星搭配文章列表返回 code 不是 200');
            return [];
        }
    });
};

exports.setFavorite = (params, uid) => {
    if (!uid) {
        return Promise.resolve({
            code: 401,
            message: '未登录'
        });
    }

    return api.get('', sign.apiSign({
        method: params.type === 'del' ? 'app.sns.cancelFavorBackCount' : 'app.sns.setFavorBackCount',
        client_type: 'h5',
        article_id: params.articleId,
        uid: uid
    }));
};