article.js 2.92 KB
/**
 * 文章model
 * @author: leo <qi.li@yoho.cn>
 * @date: 28/06/2017
 */

const _ = require('lodash');
const mysqlCli = global.yoho.utils.mysqlCli;

const TABLE_ACT_ARTICLE = 'act_article';
const TABLE_ACT_ARTICLE_IMG = 'act_article_img';

// const TABLE_ACT_ARTICLE_GOOD = 'act_article_good';

class ArticleModel extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    /**
     * 获取文章列表
     * @returns {*}
     */
    articleList({pageNo, pageSize, isPopular, orderBy, order}) {
        const orderMapping = {
            goodCount: 'good_count',
            createTime: 'create_time'
        };

        let limitSql;
        let orderSql;
        let whereSql = '';

        orderSql = `ORDER BY AA.${orderMapping[orderBy]} ${order}`;

        if (isPopular) {
            whereSql = 'WHERE AA.good_count > 10';
        }

        limitSql = `LIMIT ${(pageNo - 1) * pageSize}, ${pageSize}`;

        return mysqlCli.query(
            `SELECT AA.id, AA.good_count goodCount, 
                    AAI.img_url imgUrl, AA.content, DATE_FORMAT(AA.create_time, '%Y-%m-%d %H:%i:%S') createTime 
            FROM ${TABLE_ACT_ARTICLE} AS AA
            INNER JOIN ${TABLE_ACT_ARTICLE_IMG} AS AAI 
            ON AA.id = AAI.article_id
            ${whereSql} ${orderSql} ${limitSql};`
        );
    }

    /**
     * 发表文章
     * @param actId 活动ID
     * @param content 文章内容
     * @param imgUrl 图片链接
     * @returns {*}
     */
    createArticle({actId, content, imgUrl}) {
        const session = this.ctx.req.session;
        const userId = _.get(session, 'user.id');

        return mysqlCli.insert(
            `insert into ${TABLE_ACT_ARTICLE} (act_id, user_id, content) values (:actId, :userId, :content);`,
            {
                actId,
                userId,
                imgUrl,
                content
            }
        );
    }

    /**
     * 文章图片插入
     * @param articleId
     * @param imgUrl
     * @returns {*}
     */
    insertArticleImg(articleId, imgUrl) {
        return mysqlCli.insert(
            `insert into ${TABLE_ACT_ARTICLE_IMG} (article_id, img_url) values (:articleId, :imgUrl);`,
            {
                imgUrl,
                articleId
            }
        );
    }

    /**
     * 获取单个文章详情
     * @param articleId
     * @returns {*}
     */
    getSingleArticle(articleId, actId) {
        return mysqlCli.query(`SELECT AA.id AS id,AA.content AS content,AA.good_count AS good_count,
            DATE_FORMAT(AA.create_time, '%Y-%m-%d %H:%i:%S') AS create_time,
            AAI.img_url 
            FROM ${TABLE_ACT_ARTICLE} AS AA
            INNER JOIN ${TABLE_ACT_ARTICLE_IMG}  AS AAI
            WHERE AAI.article_id = AA.id 
            AND AA.act_id = :actId 
            AND AA.id = :articleId;`,
            {
                actId,
                articleId
            }
        );
    }
}

module.exports = ArticleModel;