favorite.js 4.26 KB
/**
 * Created by TaoHuang on 2016/6/13.
 */
'use strict';

const helpers = global.yoho.helpers;
const brandService = require('../models/favorite-brand-service');
const productService = require('../models/favorite-product-service');
const fav = require('../models/favorite');
const _ = require('lodash');

/**
 * 收藏品牌ajax请求
 */
const changeFavoriteBrand = (req, res, next) => {
    let uid = req.user.uid || '';
    let brandId = req.body.brandId;
    let type = req.body.type || '';

    if (uid && brandId) {
        req.ctx(brandService).changeAsync(type, uid, brandId).then(result => {
            return res.json(result);
        }).catch(next);
    } else if (!uid) {
        return res.json({
            code: 403,
            message: '用户ID不存在',
            data: {
                url: helpers.urlFormat('/signin.html')
            }
        });
    } else {
        return res.json({
            code: 400,
            message: '操作失败'
        });
    }
};

const isFavoriteBrand = (req, res, next) => {
    let uid = req.user.uid || '';
    let brandId = req.query.brandId;

    if (uid && brandId) {
        req.ctx(brandService).isFavoriteAsync(uid, brandId).then(result => {
            return res.json(result);
        }).catch(next);
    } else {
        return res.json({
            code: 400,
            message: '状态失败'
        });
    }
};

const collectProduct = (req, res, next) => {
    let uid = req.user.uid || '';
    let pid = req.body.productId;
    let type = req.body.type || 'add';

    if (uid && pid) {
        switch (type) {
            case 'add':
                req.ctx(productService).createAsync(uid, pid)
                    .then(result => {
                        if (result.code === 413) {
                            result.message = '该商品已经收藏';
                        }

                        res.json(result);
                    })
                    .catch(next);
                break;
            case 'cancel':
                req.ctx(productService).deleteAsync(uid, pid)
                    .then(result => res.json(result))
                    .catch(next);
                break;
            default:
                res.json({
                    code: 400,
                    message: '错误类型'
                });
        }
    } else if (!uid) {
        res.json({
            code: 403,
            message: '用户没有登录',
            data: {
                url: helpers.urlFormat('/signin.html')
            }
        });
    } else {
        res.json({
            code: 400,
            message: '收藏失败'
        });
    }
};

const collectShop = (req, res, next) => {
    let uid = req.user.uid || '';
    let shopId = req.body.shopId;
    let isadd = req.body.isFavorite * 1 ? true : false;

    // needColloect 说明刚登录状态 是cookie传的值
    if (req.body.needColloect * 1 === 1) {
        isadd = true;
    }

    if (!uid) {
        res.json({
            code: 401,
            message: '用户没有登录',
            data: {url: helpers.urlFormat('/signin.html')}
        });
    } else if (!shopId) {
        res.json({
            code: 400,
            message: '收藏失败'
        });
    } else {
        req.ctx(fav).toggleFavShop(shopId, uid, isadd).then(result => {
            res.json(result);
        }).catch(next);
    }
};

const isFavShop = (req, res, next) => {
    let uid = req.user.uid;
    let shopId = req.body.shopId;

    if (!uid || !shopId) {
        return res.json({
            code: 400,
            message: '未收藏'
        });
    }

    req.ctx(fav).getFavStatus(uid, shopId, 'shop').then(result => {
        return res.json(result);
    }).catch(next);
};

const num = (req, res, next) => {
    let bid = _.parseInt(`0${req.query.bid}`) || 0;
    let sid = _.parseInt(`0${req.query.sid}`) || 0;

    if (sid) {
        return req.ctx(brandService).getShopFavNumAsync(sid).then((result) => {
            res.json(result);
        }).catch(next);
    }

    if (bid) {
        return req.ctx(brandService).getBrandFavNumAsync(bid).then((result) => {
            res.json(result);
        }).catch(next);
    }

    res.json({});
};

module.exports = {
    changeFavoriteBrand,
    collectProduct,
    collectShop,
    isFavShop,
    isFavoriteBrand,
    num
};