func SaveOrUpdate(articleLike entities.ArticleLike, db db.DB) error {
	sql := bytes.NewBufferString("insert into article_like (user_id , article_id,valid,created_at) ")
	sql.WriteString("values(?,?,?,now()) ")
	sql.WriteString("on duplicate key update valid =?,updated_at=now() ")
	_, err := db.Execute(sql.String(), []interface{}{articleLike.UserId, articleLike.ArticleId, articleLike.Valid, articleLike.Valid})
	return err
}
func BatchSaveOrUpdateCategory(db db.DB, categories []entities.Category) {
	sql := bytes.NewBufferString("insert into category(user_id,name,`order`,article_count,created_at) ")
	sql.WriteString("values(?,?,0,1,now()) ")
	sql.WriteString("on duplicate key update article_count =article_count+1,updated_at=now()")
	for _, category := range categories {
		db.Execute(sql.String(), []interface{}{category.UserId, category.Name})
	}

}
func SaveArticleView(articleView entities.ArticleView, db db.DB) error {
	_, err := db.Insert(&articleView)
	return err

}
func HasViewArticle(articleId int64, userId int64, ip string, db db.DB) (bool, error) {

	count, err := db.QueryTable("article_view").Filter("article_id", articleId).Filter("ip", ip).Count()

	return count > 0, err
}
func HasLikeArticle(articleId int64, userId int64, db db.DB) (bool, error) {
	count, err := db.QueryTable("article_like").Filter("user_id", userId).Filter("article_id", articleId).Filter("valid", 1).Count()

	return count > 0, err
}