search.js 2.88 KB
/**
 * 列表、搜索相关api调用
 */

'use strict';

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

/**
 * 过滤空参数,不传给api
 * @param obj
 * @returns {*}
 * @private
 */
function _paramHanlde(obj) {
    _.keys(obj).forEach(k => {
        if (obj[k] === null || obj[k] === '') {
            _.unset(obj, k);
        }
    });

    if (obj.price) {
        let prices = obj.price.split(',');

        if (!prices[1]) {
            prices[1] = Number.MAX_SAFE_INTEGER;
            obj.price = prices.join(',');
        }
    }

    // if (obj.standard) {
    //     let standards = obj.standard.split(',');
    //
    //     obj.standard = JSON.stringify(standards);
    // }

    // let _gender;
    //
    if (obj.yh_channel) {
        switch (obj.yh_channel) {
            case 'men':
                obj.yh_channel = '301';
                break;
            case 'women':
                obj.yh_channel = '302';
                break;
            default:
                obj.yh_channel = '303';
                break;
        }
    }

    // if (obj.gender || _gender) {
    //     obj.gender = obj.gender || _gender;
    // }
    return obj;
}

const Search = {

    /**
     * 搜索接口调用
     * @param params
     * @returns {*}
     */
    queryProduct(params) {

        let finalParams = {
            method: 'web.search.search',
            limit: 45,
            need_filter: '1'
        };

        Object.assign(finalParams, _paramHanlde(params));

        return api.get('', finalParams);
    },
    queryProductOfBrand(params) {
        let finalParams = {
            method: 'web.search.search',
            limit: 45
        };

        Object.assign(finalParams, _paramHanlde(params));

        return api.get('', finalParams);
    },
    queryNewProduct(params) {
        let finalParams = {
            method: 'web.search.search',
            limit: 45,
            dayLimit: 1
        };

        Object.assign(finalParams, _paramHanlde(params));

        return api.get('', finalParams);
    },
    queryAllSort(params) {

        params = _.clone(params) || {};

        delete params.msort;
        delete params.misort;

        return api.get('', _.assign({
            method: 'web.regular.groupsort'
        }, params), {code: 200});
    },
    getSuggest(params) {
        return api.get('', _.assign({
            method: 'app.search.fuzzy',
            app_type: 1
        }, params), {code: 200}).then(result => {
            let list = result.data || [];
            let suggest = [];

            _.forEach(list, function(value) {
                suggest.push({
                    href: helpers.urlFormat('/product/query', {query: value.keyword}),
                    keyword: value.keyword,
                    count: value.count
                });
            });

            return suggest;
        });
    }
};

module.exports = Search;