Moved away from local files to complete database driven articles
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user