diff --git a/net/server/internal/api_addArticle.go b/net/server/internal/api_addArticle.go index eb2d69b9..95e13aa7 100644 --- a/net/server/internal/api_addArticle.go +++ b/net/server/internal/api_addArticle.go @@ -29,11 +29,17 @@ func AddArticle(w http.ResponseWriter, r *http.Request) { return } - var labels []store.Label - if err := store.DB.Where("label_id IN ?", articleAccess.Labels).Find(&labels).Error; err != nil { + var labelSlots []store.LabelSlot + if err := store.DB.Preload("Label").Where("label_slot_id IN ?", articleAccess.Labels).Find(&labelSlots).Error; err != nil { ErrResponse(w, http.StatusInternalServerError, err) return } + var labels []store.Label + for _, slot := range labelSlots { + if slot.Label != nil { + labels = append(labels, *slot.Label) + } + } // save data and apply transaction var slot *store.ArticleSlot diff --git a/net/server/internal/api_removeArticle.go b/net/server/internal/api_removeArticle.go index d6b5b585..526f5c22 100644 --- a/net/server/internal/api_removeArticle.go +++ b/net/server/internal/api_removeArticle.go @@ -31,11 +31,12 @@ func RemoveArticle(w http.ResponseWriter, r *http.Request) { return res } slot.ArticleID = 0 + slot.Revision = account.ContentRevision + 1 slot.Article = nil if res := tx.Save(&slot).Error; res != nil { return res } - if res := tx.Model(&account).Update("content_revision", account.ContentRevision).Error; res != nil { + if res := tx.Model(&account).Update("content_revision", account.ContentRevision + 1).Error; res != nil { return res } return nil diff --git a/net/server/internal/modelUtil.go b/net/server/internal/modelUtil.go index 800ecef1..c22f1264 100644 --- a/net/server/internal/modelUtil.go +++ b/net/server/internal/modelUtil.go @@ -71,7 +71,7 @@ func getArticleModel(slot *store.ArticleSlot, contact bool, shared bool) *Articl var labels []string; for _, label := range slot.Article.Labels { - labels = append(labels, label.LabelId) + labels = append(labels, label.LabelSlot.LabelSlotId) } return &Article{ diff --git a/net/server/internal/store/schema.go b/net/server/internal/store/schema.go index a0c82c2a..15c01293 100644 --- a/net/server/internal/store/schema.go +++ b/net/server/internal/store/schema.go @@ -9,6 +9,8 @@ func AutoMigrate(db *gorm.DB) { db.AutoMigrate(&Account{}); db.AutoMigrate(&AccountToken{}); db.AutoMigrate(&Group{}); + db.AutoMigrate(&LabelSlot{}); + db.AutoMigrate(&LabelData{}); db.AutoMigrate(&Label{}); db.AutoMigrate(&CardSlot{}); db.AutoMigrate(&Card{}); @@ -117,18 +119,25 @@ type GroupData struct { Data string } +type LabelSlot struct { + ID uint + LabelSlotId string `gorm:"not null;index:labelslot,unique"` + AccountID uint `gorm:"not null;index:labelslot,unique"` + Revision int64 `gorm:"not null"` + LabelID uint `gorm:"not null;default:0"` + Label *Label + Account Account +} + type Label struct { ID uint `gorm:"primaryKey;not null;unique;autoIncrement"` - LabelId string `gorm:"not null;index:label,unique"` - AccountID uint `gorm:"not null;index:label,unique"` LabelDataID uint `gorm:"not null;index:labeldata"` - Revision int64 `gorm:"not null"` DataType string `gorm:"index"` Created int64 `gorm:"autoCreateTime"` Updated int64 `gorm:"autoUpdateTime"` Groups []Group `gorm:"many2many:label_groups;"` - Account Account LabelData LabelData + LabelSlot LabelSlot } type LabelData struct {