Moved away from local files to complete database driven articles

This commit is contained in:
2021-12-20 23:10:04 +01:00
parent bc3ec64b3c
commit c909339a73
20 changed files with 302 additions and 299 deletions

View File

@@ -1,9 +1,9 @@
package database
import (
"TheAdversary/schema"
"database/sql"
"fmt"
"gorm.io/gorm/clause"
)
type ArticleQueryOptions struct {
@@ -15,16 +15,15 @@ type ArticleQueryOptions struct {
Limit int
}
func (db *Database) GetArticleByName(name string) (*schema.Article, error) {
article := &schema.Article{}
err := db.gormDB.Table("article").Where("name = ?", name).Scan(article).Error
if article.Added == 0 {
func (db *Database) GetArticleByName(name string) (article *Article, err error) {
err = db.gormDB.Table("article").Where("name = ?", name).Scan(&article).Error
if article == nil {
return nil, sql.ErrNoRows
}
return article, err
}
func (db *Database) GetArticles(query string, options ArticleQueryOptions) ([]*schema.Article, error) {
func (db *Database) GetArticles(query string, options ArticleQueryOptions) ([]*Article, error) {
request := db.gormDB.Table("article")
var where bool
if options.Name {
@@ -69,9 +68,9 @@ func (db *Database) GetArticles(query string, options ArticleQueryOptions) ([]*s
return nil, err
}
var articles []*schema.Article
var articles []*Article
for rows.Next() {
article := &schema.Article{}
article := &Article{}
if err = db.gormDB.ScanRows(rows, article); err != nil {
return nil, err
}
@@ -81,12 +80,23 @@ func (db *Database) GetArticles(query string, options ArticleQueryOptions) ([]*s
return articles, nil
}
func (db *Database) AddArticle(article *schema.Article) error {
return db.gormDB.Table("article").Create(article).Error
func (db *Database) AddArticle(article Article, tags []Tag) error {
if err := db.gormDB.Table("article").Create(&article).Select("id", &article.ID).Error; err != nil {
return err
}
return db.gormDB.Table("article_tags").Create(ArticleTagsFromTagSlice(article, tags)).Error
}
func (db *Database) UpdateArticle(name string, article *schema.Article) error {
return db.gormDB.Table("article").Where("name = ?", name).Save(article).Error
func (db *Database) UpdateArticle(article Article, tags []Tag) error {
if err := db.gormDB.Table("article").Where("id = ?", article.ID).Save(article).Error; err != nil {
return err
}
return db.gormDB.Table("article_tags").Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "article_id"}, {Name: "tag_id"}},
DoNothing: true,
}).Create(ArticleTagsFromTagSlice(article, tags)).Error
}
func (db *Database) DeleteArticlesByNames(names ...string) error {