Files
nCovTrack-Backend/service/article/article.go
2022-04-30 11:30:55 +08:00

65 lines
1.9 KiB
Go

package article
import (
"nCovTrack-Backend/global"
"nCovTrack-Backend/models"
"strconv"
)
//ListPublishedArticles list the articles published, use to show the articles to all people
func ListPublishedArticles() *[]models.ListArticle {
return listArticles(1, 0)
}
//ListPublishedArticlesByUser list the user's published articles
func ListPublishedArticlesByUser(id int) *[]models.ListArticle {
return listArticles(1, id)
}
//ListNotPublishedArticlesByUser list the user's not publish articles
func ListNotPublishedArticlesByUser(id int) *[]models.ListArticle {
return listArticles(0, id)
}
//listArticles complex function need to directly use gorm
func listArticles(isPublish int, createUser int) *[]models.ListArticle {
queryStr := "back_article.is_delete = 0 AND is_publish = " + strconv.Itoa(isPublish)
if createUser != 0 {
queryStr += " AND create_user = " + strconv.Itoa(createUser)
}
var res []models.ListArticle
global.Db.Table("back_article").
Select("back_user.username, back_article.*").
Joins("join back_user on back_article.create_user=back_user.id").
Where(queryStr).Find(&res)
if res == nil {
res = []models.ListArticle{}
}
return &res
}
//SaveArticle save the articles
func SaveArticle(article map[string]interface{}) (ok bool) {
models.BeforeSave(article, -1)
ok, rows := models.Upsert[models.BackArticle](article)
return ok && rows != 0
}
//DeleteArticle delete article by id
func DeleteArticle(id int) (ok bool) {
ok, rowsAffected := models.DeleteById[models.BackArticle](id)
return ok && rowsAffected != 0
}
//GetArticleById get an article
func GetArticleById(id int) map[string]interface{} {
return models.Get[models.BackArticle]([]map[string]interface{}{{"id": id}})
}
//PublishArticle publish an article
func PublishArticle(id int) (ok bool) {
colMap := map[string]interface{}{"id": id, "is_publish": 1}
ok, rowsAffected := models.Upsert[models.BackArticle](colMap)
return ok && rowsAffected != 0
}