Add ability to update tags when resubmitting article
This commit is contained in:
@ -6,10 +6,7 @@ import (
|
||||
)
|
||||
|
||||
func (db *DB) WriteArticleTags(articleID int64, tagIDs []int64) error {
|
||||
query := `
|
||||
INSERT INTO articles_tags (article_id, tag_id)
|
||||
VALUES (?, ?)
|
||||
`
|
||||
query := "INSERT INTO articles_tags (article_id, tag_id) VALUES (?, ?)"
|
||||
|
||||
for i := 0; i < TxMaxRetries; i++ {
|
||||
err := func() error {
|
||||
@ -68,8 +65,8 @@ func (db *DB) GetArticleTags(articleID int64) ([]*Tag, error) {
|
||||
}
|
||||
|
||||
func (db *DB) UpdateArticleTags(articleID int64, tagIDs []int64) error {
|
||||
query := `
|
||||
`
|
||||
deleteQuery := "DELETE FROM articles_tags WHERE article_id = ?"
|
||||
insertQuery := "INSERT INTO articles_tags (article_id, tag_id) VALUES (?, ?)"
|
||||
|
||||
for i := 0; i < TxMaxRetries; i++ {
|
||||
err := func() error {
|
||||
@ -78,6 +75,22 @@ func (db *DB) UpdateArticleTags(articleID int64, tagIDs []int64) error {
|
||||
return fmt.Errorf("error starting transaction: %v", err)
|
||||
}
|
||||
|
||||
if _, err := tx.Exec(deleteQuery, articleID); err != nil {
|
||||
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
||||
log.Fatalf("transaction error: %v, rollback error: %v", err, rollbackErr)
|
||||
}
|
||||
return fmt.Errorf("error deleting entries from articles_tags before inserting new ones: %v", err)
|
||||
}
|
||||
|
||||
for _, tagID := range tagIDs {
|
||||
if _, err := tx.Exec(insertQuery, articleID, tagID); err != nil {
|
||||
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
||||
log.Fatalf("transaction error: %v, rollback error: %v", err, rollbackErr)
|
||||
}
|
||||
return fmt.Errorf("error inserting new entries into articles_tags: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return fmt.Errorf("error committing transaction: %v", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user