list.js 9.08 KB
/**
 * 品类|品牌|店铺 model
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/07/21
 */
'use strict';
const utils = '../../../utils';
const logger = global.yoho.logger;
const camelCase = global.yoho.camelCase;
const _ = require('lodash');
const helpers = global.yoho.helpers;
const api = global.yoho.API;

/**
 * 品牌名称处理
 * @param  {[object]} list
 * @return {[object]}
 */
const _processBrandNames = (list) => {
    const formatData = [];

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

    _.forEach(list, (item) => {
        _.forEach(item, (obj) => {
            formatData.push({
                brandDomain: obj.brandDomain,
                brandName: obj.brandName
            });
        });
    });

    return formatData;
};

/**
 * 品牌名称处理
 * @param  {[object]} list
 * @return {[object]}
 */
const _processClassNames = (list) => {
    const formatData = {
        first: {},
        second: {}
    };

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

    _.forEach(list, (item) => {
        _.forEach(item, (obj) => {
            formatData.first[obj.categoryId] = obj.categoryName;

            if (obj.sub) {
                _.forEach(obj.sub, (sub) => {
                    formatData.second[sub.categoryId] = sub.categoryName;
                });
            }

        });
    });

    return formatData;
};

/* 多品牌店铺列表数据信息处理*/
const _processBrandShops = (list) => {
    const formatDat = [];

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

    _.forEach(list, (item) => {
        if (item.shopId) {
            formatDat.push({
                url: helpers.urlFormat('/product/index/brand/', {
                    shop_id: item.brandId
                }),
                thumb: helpers.image(item.brandIco, 75, 40),
                name: item.brandName
            });
        }
    });

    return formatDat;
};

/**
 * 获取品牌信息数据
 * @param  {int} brandId 品牌ID
 * @return array         banner数据
 */
const getBrandIntro = (brandId, uid) => {
    let param = {};

    if (uid) {
        param = {
            uid: uid
        };
    }

    return api.get('', _.assign({
        method: 'app.brand.getBrandIntro',
        brand_id: brandId
    }, param), {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            let list = camelCase(result.data) || {};

            return {
                id: list.brandId,
                intro: list.brandIntro,
                collected: (list.isFavorite && list.isFavorite === 'Y') ? true : false,
                title: list.brandName ? list.brandName : ''
            };
        } else {
            logger.error('get brand introduction api return code is not 200');
            return {};
        }
    });
};

/**
 * 获取品牌banner数据
 * @param  {int} brandId 品牌ID
 * @return array         banner数据
 */
const getBrandBanner = (brandId) => {
    return api.get('', {
        method: 'app.brand.banner',
        brand_id: brandId
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            if (result.data.banner) {
                return helpers.image(result.data.banner, 640, 150);
            } else {
                return '';
            }
        } else {
            logger.error('get brand banner api return code is not 200');
            return {};
        }
    });
};

/**
 * 获取所有的品牌名称
 **/
const getAllBrandNames = () => {
    return api.get('', {
        method: 'app.brand.brandlist'
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            return _processBrandNames(result.data.brands);
        } else {
            logger.error('get brand all name data api return code is not 200');
            return {};
        }
    });
};

/**
 * 获取所有的品类名称
 **/
const getClassNames = () => {
    return api.get('', {
        method: 'app.sort.get'
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            return _processClassNames(result.data);
        } else {
            logger.error('get category name api return code is not 200');
            return {};
        }
    });
};

/**
 * 根据品牌域名获取品牌LOGO
 * @param {string} domain 品牌域名
 * @return array | false
 */
const getBrandLogoByDomain = (domain) => {
    return api.get('', {
        method: 'web.brand.byDomain',
        domain: domain
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            if (result.data) {
                let formatData = camelCase(result.data);

                return {
                    id: formatData.id,
                    url: helpers.urlFormat('', null, formatData.brandDomain),
                    thumb: helpers.image(formatData.brandIco, 75, 40),
                    name: formatData.brandName,
                    shopId: formatData.shopId ? formatData.shopId : 0, // 店铺id
                    type: formatData.type ? formatData.type : 0
                };
            } else {
                return false;
            }
        } else {
            logger.error('get brand logo by domain api return code is not 200');
            return {};
        }
    });
};

/**
 * 根据brandId 获取相关店铺列表
 * @param brandId
 * @return array
 */
const getBrandShops = (brandId) => {
    return api.get('', {
        method: 'app.shop.queryShopsByBrandId',
        brand_id: brandId
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            return _processBrandShops(result.data);
        } else {
            logger.error('get shop list by brandId api return code is not 200');
            return {};
        }
    });
};

/**
 * 收藏
 * @param {int} id ID
 * @param {int} uid 用户ID
 * @param type
 * @return array
 */
const setFavorite = (id, uid, type) => {
    return api.post('', {
        method: 'app.favorite.add',
        fav_id: id,
        id: id,
        uid: uid,
        type: type
    });
};

/**
 * 取消收藏
 *
 * @param {int} id 品牌ID
 * @param {int} uid 用户ID
 * @param type
 * @return array
 */
const setFavoriteCancel = (id, uid, type) => {
    return api.post('', {
        method: 'app.favorite.cancel',
        fav_id: id,
        id: id,
        uid: uid,
        type: type
    });
};

/**
 * 获取店铺装修的所有资源接口
 * @param {int} shopId 店铺id
 * @return array
 */
const getShopDecorator = (shopId) => {
    return api.get('', {
        method: 'app.shopsdecorator.getList',
        shop_id: shopId
    }, {
        cache: true
    }).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            logger.error('get shop all resources api return code is not 200');
            return '';
        }
    });
};

/**
 * 获取店铺信息
 * @param {int} shopId 店铺id
 * @param {int} uid 用户id 判断用户是否收藏店铺
 * @return array
 */
const getShopInfo = (shopId, uid) => {
    return api.get('', {
        method: 'app.shops.getIntro',
        shop_id: shopId,
        uid: uid || 0
    }).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            logger.error('get shop info api return code is not 200');
            return {};
        }
    });
};

/**
 * 获取店铺下面的所有分类
 * @param {int} shopId 店铺id
 * @param {string} channel 频道
 * @return array
 */
const getShopCategory = (shopId, channel) => {
    return api.get('', {
        method: 'app.shop.getSortInfo',
        yh_channel: channel,
        shop_id: shopId
    }).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            logger.error('get shop all classify api return code is not 200');
            return {};
        }
    });
};

/**
 * 调取店铺简介数据
 * @param {int} shopId
 */
const getShopIntro = (shopId) => {
    return api.get('', {
        method: 'app.shops.getIntro',
        shop_id: shopId
    }).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            logger.error('get shop intro api return code is not 200');
            return {};
        }
    });
};

/**
 * 获取店铺下面的所有品牌
 * @param {int} shopId 店铺id
 */
const getShopBrands = (shopId) => {
    return api.get('', {
        method: 'app.shops.getShopsBrands',
        shop_id: shopId
    }).then((result) => {
        if (result && result.code === 200) {
            result = camelCase(result.data);
            return result[0].brandId;
        } else {
            logger.error('gGet all the brands under the shop return code is not 200');
            return {};
        }
    });
};



module.exports = {
    getAllBrandNames,
    getClassNames,
    getBrandLogoByDomain,
    getBrandIntro,
    getBrandShops,
    getBrandBanner,
    setFavorite,
    setFavoriteCancel,
    getShopDecorator,
    getShopInfo,
    getShopCategory,
    getShopIntro,
    getShopBrands
};