consult-comment.js 4.75 KB
/**
 * 商品详情相关models
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/6/27
 */

'use strict';

const api = global.yoho.API;
const _ = require('lodash');

/**
 * 获取默认咨询列表
 */
const _getCommonConsult = () => {
    let params = {
        method: 'app.consult.common'
    };

    return api.get('', params, {
        code: 200
    }).then(result => {
        let data = {};

        if (result.data) {
            data.faq = result.data;
        }

        return data;
    });
};

/**
 * 处理评价列表数据
 * @data  {[object]} 评价列表原始数据
 * @return {[object]}
 */
const _formatCommentsList = (data) => {
    let comment = {
        list: [],
        total: 0
    };

    if (data.length) {
        _.forEach(data, (value) => {
            comment.list.push({
                userName: value.nickname,
                desc: `${value.color_name}/${value.size_name}`,
                content: value.content,
                time: value.create_time
            });

            comment.total = value.total;
        });
    }

    return comment;
};

/**
 * 处理咨询列表数据
 * @data  {[object]} 咨询列表原始数据
 * @return {[object]}
 */
const _formatConsultsList = (data) => {
    let list = [];

    if (data.length) {
        _.forEach(data, (value) => {
            list.push({
                question: value.ask,
                time: value.ask_time,
                answer: value.answer,
                id: value.id,
                isLike: value.is_like === 'Y',
                like: _.toNumber(value.like),
                isUseful: value.is_useful === 'Y',
                useful: _.toNumber(value.useful)
            });
        });
    }

    return list;
};

/**
 * 获取评价数据
 * @id  {[number]} 商品id
 * @page  {[number]} 页码
 * @limit  {[number]} 每页评价数量
 * @return {[object]}
 */
const _getComments = (id, page, limit) => {
    let params = {
        method: 'app.comment.li',
        product_id: id,
        page: page ? page : 1,
        limit: limit ? limit : 300
    };

    return api.get('', params, {
        code: 200
    }).then(result => {
        let data = {};

        if (result.data) {
            Object.assign(data, _formatCommentsList(result.data));
        }

        return data;
    });
};

/**
 * 获取咨询数据
 * @id  {[number]} 商品id
 * @page  {[number]} 页码
 * @limit  {[number]} 每页咨询数量
 * @return {[object]}
 */
const _getConsults = (id, page, limit) => {
    let params = {
        method: 'app.consult.li',
        product_id: id,
        page: page ? page : 1,
        limit: limit ? limit : 300
    };

    return api.get('', params, {
        code: 200
    }).then(result => {
        let data = {};

        if (result.data && result.data.list) {
            Object.assign(data, {
                list: _formatConsultsList(result.data.list),
                pageTotal: result.data.page_total,
                total: result.data.total
            });
        }

        return data;
    });
};

/**
 * 购买评价列表
 * @param  {[object]} 查询参数
 * @return {[object]}
 */
let comments = (params) => {
    return _getComments(params.product_id, 1, 60).then(result => {
        let data = {};

        if (result.list && result.list.length) {
            if (result.total) {
                _.set(data, 'pageHeader.navTitle', `购买评价(${result.total})`);
            }
            data.comments = result.list;
        }

        return data;
    });
};

/**
 * 购买咨询列表
 * @params  {[object]} 查询参数
 * @return {[object]}
 */
let consults = (params) => {
    return api.all([
        _getCommonConsult(),
        _getConsults(params.product_id, 1, 60)
    ]).then(result => {
        let data = {
            link: `/product/detail/consultform?product_id=${params.product_id}`
        };

        Object.assign(data, result[0]);

        if (result[1].list && result[1].list.length) {
            if (result[1].total) {
                _.set(data, 'pageHeader.navTitle', `购买咨询(${result[1].total})`);
            }
            data.consults = result[1].list;
        }

        return data;
    });
};

/**
 * 购买咨询列表
 * @uid  {[number]} 用户id
 * @productId  {[number]} 商品id
 * @content  {[string]} 咨询内容
 * @return {[object]}
 */
let addConsult = (uid, productId, content) => {
    let params = {
        method: 'h5.consult.add',
        product_id: productId,
        content: content,
        uid: uid
    };

    return api.post('', params).then(result => {
        if (result.code !== 200) {
            return false;
        }
        return result;
    });
};

module.exports = {
    comments,  // 商品详情相关-购买评价
    consults,  // 商品详情相关-购买咨询
    addConsult  // 商品详情相关-添加咨询
};