article.js 5.6 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 POST_SUCCESS = '操作成功';
const GET_SUCCESS = '获取成功';
const INVALID_PARAMS = '参数错误';

const article = {
    /**
     * 文章列表
     * @param req
     * @param res
     * @param next
     */
    list(req, res, next) {
        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: INVALID_PARAMS
            });
        }

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

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

        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);
            });
            return list;
        })
        .then(list => {
            req.ctx(ArticleModel).allArticlesNum(actId)
                .then(totalCount => {
                    res.json({
                        code: 200,
                        data: list,
                        pageNo,
                        pageSize,
                        totalCount,
                        totalPage: Math.ceil(totalCount / pageSize),
                        message: GET_SUCCESS
                    });
                });
        })
        .catch(next);

    },

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

        if (!imgUrl || !content || !actId) {
            errorMsg = INVALID_PARAMS;
        }

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

        const params = {
            actId,
            imgUrl,
            content
        };

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

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

        if (!actId || !articleId) {
            errorMsg = INVALID_PARAMS;
        }

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

        req.ctx(ArticleModel).getSingleArticle(actId, articleId)
            .then(ret => {
                let img_arr = _.map(ret, 'img_url');

                let result = {};
                let final_result = {};

                if (ret.length > 0) {
                    result.id = ret[0].id;
                    result.content = ret[0].content;
                    result.good_count = ret[0].good_count;
                    result.user_id = ret[0].user_id;
                    result.user_name = ret[0].user_name;
                    result.create_time = ret[0].create_time;
                    result.img_url = img_arr;
                }
                _.each(result, (value, key) => {
                    final_result[camelcase(key)] = value;
                });
                res.json({
                    code: 200,
                    data: final_result,
                    message: GET_SUCCESS
                });
            })
            .catch(next);
    },

    /**
     * 文章点赞
     * @param req
     * @param res
     * @param next
     */
    like(req, res, next) {
        const actId = req.body.actId;
        const articleId = req.body.articleId;

        if (!actId || !articleId) {
            return res.json({
                code: 400,
                message: INVALID_PARAMS
            });
        }

        req.ctx(ArticleModel).likeArticle(actId, articleId)
            .then(() => {
                return req.ctx(ArticleModel)
                          .insertLikeDetail(actId, articleId);
            })
            .then(() => {
                res.json({
                    code: 200,
                    message: POST_SUCCESS
                });
            })
            .catch(next);
    }
};


module.exports = article;