article.js 4.29 KB
/**
 * 文章controller
 * @author: leo <qi.li@yoho.cn>
 * @date: 23/06/2017
 */
const _ = require('lodash');
const camelcase = require('camelcase');
const ArticleModel = require('../models/article');

const ADD_ARTICLE_SUCCESS = '文章发表成功';
const GET_ARTICLES_SUCCESS = '获取文章列表成功';
const GET_ARTICLE_SUCCESS = '获取文章详情成功';
const INVALID_ACTIVITY_ID = '活动ID[actId]不能为空';
const INVALID_IMG = '图片[imgUrl]不能为空';
const INVALID_CONTENT = '内容[content]都不能为空';
const MISS_PARAMS = '缺少参数';
const INVALID_ORDER = '排序[order]值为asc或desc';
const INVALID_ORDER_BY = '排序字段[orderBy]非法';

const article = {
    /**
     * 文章列表
     * @param req
     * @param res
     */
    list(req, res) {
        const query = req.query;
        const actId = query.actId;
        const pageNo = query.pageNo || 1;
        const pageSize = query.pageSize || 10;
        const orderBy = query.orderBy || 'createTime';
        const order = ((query.order || 'desc') + '').toLowerCase();
        const orderByFields = ['createTime', 'goodCount'];

        if (!actId) {
            return res.json({
                code: 400,
                message: '活动ID[actId]不能为空'
            });
        }

        if (order !== 'asc' && order !== 'desc') {
            return res.json({
                code: 400,
                message: INVALID_ORDER
            });
        }

        if (orderByFields.indexOf(orderBy) === -1) {
            return res.json({
                code: 400,
                message: INVALID_ORDER_BY
            });
        }

        req.ctx(ArticleModel).articleList({
            actId,
            order,
            orderBy,
            pageNo,
            pageSize
        })
        .then(result => {
            let list = [];

            _.each(result, item => {
                let data = {};

                _.each(item, (val, key) => {
                    data[camelcase(key)] = val;
                });
                list.push(data);
            });

            req.ctx(ArticleModel).allArticlesNum(actId)
                .then(totalCount => {
                    res.json({
                        code: 200,
                        data: list,
                        pageNo,
                        pageSize,
                        totalCount,
                        totalPage: Math.ceil(totalCount / pageSize),
                        message: GET_ARTICLES_SUCCESS
                    });
                });
        });

    },

    /**
     * 发布文章
     * @param req
     * @param res
     */
    publish(req, res) {
        let errorMsg = '';
        const actId = req.body.actId;
        const imgUrl = req.body.imgUrl;
        const content = req.body.content;

        !imgUrl && (errorMsg = INVALID_IMG);
        !content && (errorMsg = INVALID_CONTENT);
        !actId && (errorMsg = INVALID_ACTIVITY_ID);

        if (errorMsg) {
            return res.json({
                code: 400,
                message: errorMsg
            });
        }

        const params = {
            actId,
            imgUrl,
            content
        };

        req.ctx(ArticleModel).createArticle(params)
            .then((id) => {
                req.ctx(ArticleModel).insertArticleImg(id, imgUrl)
                    .then(() => {
                        res.json({
                            code: 200,
                            data: {id},
                            message: ADD_ARTICLE_SUCCESS
                        });
                    });
            });
    },

    /**
     * 查询单个article详情
     * @param req
     * @param res
     */
    querySingle(req, res) {
        let errorMsg = '';
        const actId = req.query.actId;
        const articleId = req.query.articleId;

        !actId && (errorMsg = MISS_PARAMS);
        !articleId && (errorMsg = MISS_PARAMS);

        if (errorMsg) {
            return res.json({
                code: 400,
                message: errorMsg
            });
        }

        req.ctx(ArticleModel).getSingleArticle(actId, articleId)
            .then(ret => {
                res.json({
                    code: 200,
                    data: ret,
                    message: GET_ARTICLE_SUCCESS
                });
            });
    }
};


module.exports = article;