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(claims models.TokenClaims, article map[string]interface{}) (ok bool) { models.BeforeSave(article, claims.ID) 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 }