From c48a4b944bb3138468fd315a415fd4436c12b7ed Mon Sep 17 00:00:00 2001 From: ericprd Date: Fri, 7 Mar 2025 15:16:05 +0800 Subject: [PATCH] fix: update tags and categories not updated --- internal/accessor/news/update.go | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/internal/accessor/news/update.go b/internal/accessor/news/update.go index c884806..7a2bb73 100644 --- a/internal/accessor/news/update.go +++ b/internal/accessor/news/update.go @@ -2,7 +2,9 @@ package newsrepository import ( "fmt" + categorydomain "legalgo-BE-go/internal/domain/category" newsdomain "legalgo-BE-go/internal/domain/news" + tagdomain "legalgo-BE-go/internal/domain/tag" "gorm.io/gorm/clause" ) @@ -34,26 +36,27 @@ func (a *accessor) Update(spec newsdomain.News) error { tx.Rollback() return fmt.Errorf("failed to update news: %v", err) } - if len(spec.Tags) < 1 { - if err := tx.Model(&spec).Association("Tags").Clear(); err != nil { - tx.Rollback() - return fmt.Errorf("failed to clear tags: %v", err) - } + + tagsDeleted := make([]tagdomain.Tag, len(spec.Tags)) + copy(tagsDeleted, spec.Tags) + if err := tx.Model(&spec).Association("Tags").Clear(); err != nil { + tx.Rollback() + return fmt.Errorf("failed to remove previous tags: %v", err) } - if len(spec.Categories) < 1 { - if err := tx.Model(&spec).Association("Categories").Clear(); err != nil { - tx.Rollback() - return fmt.Errorf("failed to clear categories: %v", err) - } - } - - if err := tx.Model(&spec).Association("Tags").Append(spec.Tags); err != nil { + if err := tx.Model(&spec).Association("Tags").Append(tagsDeleted); err != nil { tx.Rollback() return fmt.Errorf("failed to add tags: %v", err) } - if err := tx.Model(&spec).Association("Categories").Append(spec.Categories); err != nil { + categoriesDeleted := make([]categorydomain.Category, len(spec.Categories)) + copy(categoriesDeleted, spec.Categories) + if err := tx.Model(&spec).Association("Categories").Clear(); err != nil { + tx.Rollback() + return fmt.Errorf("failed to remove previous categories: %v", err) + } + + if err := tx.Model(&spec).Association("Categories").Append(categoriesDeleted); err != nil { tx.Rollback() return fmt.Errorf("failed to add categories: %v", err) }