Added ability to reject and rework article

This commit is contained in:
2024-03-10 15:03:46 +01:00
parent 28eb7e236a
commit 5145e1cd94
13 changed files with 237 additions and 88 deletions

View File

@ -8,12 +8,13 @@ import (
func (db *DB) AddArticle(a *Article) (int64, error) {
query := `
INSERT INTO articles
(title, description, content, published, author_id)
(title, description, content, published, rejected, author_id)
VALUES
(?, ?, ?, ?, ?)
(?, ?, ?, ?, ?, ?)
`
result, err := db.Exec(query, a.Title, a.Desc, a.Content, a.Published, a.AuthorID)
result, err := db.Exec(query, a.Title, a.Description, a.Content, a.Published,
a.Rejected, a.AuthorID)
if err != nil {
return 0, fmt.Errorf("error inserting article into DB: %v", err)
}
@ -37,7 +38,7 @@ func (db *DB) GetArticle(id int64) (*Article, error) {
var created []byte
var err error
if err := row.Scan(&article.Title, &created, &article.Desc,
if err := row.Scan(&article.Title, &created, &article.Description,
&article.Content, &article.Published, &article.AuthorID); err != nil {
return nil, fmt.Errorf("error scanning article row: %v", err)
}
@ -51,13 +52,14 @@ func (db *DB) GetArticle(id int64) (*Article, error) {
return article, nil
}
func (db *DB) GetCertainArticles(published bool) ([]*Article, error) {
func (db *DB) GetCertainArticles(published, rejected bool) ([]*Article, error) {
query := `
SELECT id, title, created, description, content, author_id
FROM articles
WHERE published = ?
AND rejected = ?
`
rows, err := db.Query(query, published)
rows, err := db.Query(query, published, rejected)
if err != nil {
return nil, fmt.Errorf("error querying articles: %v", err)
}
@ -67,7 +69,7 @@ func (db *DB) GetCertainArticles(published bool) ([]*Article, error) {
article := new(Article)
var created []byte
if err = rows.Scan(&article.ID, &article.Title, &created, &article.Desc,
if err = rows.Scan(&article.ID, &article.Title, &created, &article.Description,
&article.Content, &article.AuthorID); err != nil {
return nil, fmt.Errorf("error scanning article row: %v", err)
}

View File

@ -4,6 +4,7 @@ import (
"bufio"
"database/sql"
"fmt"
"log"
"os"
"strings"
"syscall"
@ -79,14 +80,28 @@ func OpenDB(dbName string) (*DB, error) {
return &db, nil
}
func (db *DB) UpdateAttribute(table string, id int64, attribute string, val interface{}) error {
query := fmt.Sprintf(`
func (db *DB) UpdateAttributes(a ...*Attribute) error {
tx, err := db.Begin()
if err != nil {
return fmt.Errorf("error starting transaction: %v", err)
}
for _, attribute := range a {
query := fmt.Sprintf(`
UPDATE %s
SET %s = ?
WHERE id = ?
`, table, attribute)
if _, err := db.Exec(query, val, id); err != nil {
return fmt.Errorf("error updating article in DB: %v", err)
`, attribute.Table, attribute.AttName)
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
if rollbackErr := tx.Rollback(); rollbackErr != nil {
log.Fatalf("error: transaction error: %v, rollback error: %v", err, rollbackErr)
}
return fmt.Errorf("error updating article in DB: %v", err)
}
}
if err = tx.Commit(); err != nil {
return fmt.Errorf("error committing transaction: %v", err)
}
return nil
}

View File

@ -11,12 +11,11 @@ const (
)
type User struct {
UserName string
FirstName string
LastName string
RejectedArticles []*Article
ID int64
Role int
UserName string
FirstName string
LastName string
ID int64
Role int
}
type Tag struct {
@ -25,11 +24,19 @@ type Tag struct {
}
type Article struct {
Title string
Created time.Time
Desc string
Content string
Published bool
ID int64
AuthorID int64
Title string
Created time.Time
Description string
Content string
Published bool
Rejected bool
ID int64
AuthorID int64
}
type Attribute struct {
Value interface{}
Table string
AttName string
ID int64
}