diff --git a/domain/document/endpoint.go b/domain/document/endpoint.go index 08c0a935..f2d2fe7b 100644 --- a/domain/document/endpoint.go +++ b/domain/document/endpoint.go @@ -221,6 +221,13 @@ func (h *Handler) Update(w http.ResponseWriter, r *http.Request) { if oldDoc.LabelID != d.LabelID { h.Store.Category.RemoveDocumentCategories(ctx, d.RefID) + err = h.Store.Document.MoveActivity(ctx, documentID, oldDoc.LabelID, d.LabelID) + if err != nil { + ctx.Transaction.Rollback() + response.WriteServerError(w, method, err) + h.Runtime.Log.Error(method, err) + return + } } err = h.Store.Document.Update(ctx, d) diff --git a/domain/document/mysql/store.go b/domain/document/mysql/store.go index 6629e26b..2de49965 100644 --- a/domain/document/mysql/store.go +++ b/domain/document/mysql/store.go @@ -238,6 +238,9 @@ func (s Scope) MoveDocumentSpace(ctx domain.RequestContext, id, move string) (er _, err = ctx.Transaction.Exec("UPDATE document SET labelid=? WHERE orgid=? AND labelid=?", move, ctx.OrgID, id) + if err == sql.ErrNoRows { + err = nil + } if err != nil { err = errors.Wrap(err, fmt.Sprintf("execute document space move %s", id)) } @@ -245,6 +248,18 @@ func (s Scope) MoveDocumentSpace(ctx domain.RequestContext, id, move string) (er return } +// MoveActivity changes the space for all document activity records. +func (s Scope) MoveActivity(ctx domain.RequestContext, documentID, oldSpaceID, newSpaceID string) (err error) { + _, err = ctx.Transaction.Exec("UPDATE useractivity SET labelid=? WHERE orgid=? AND labelid=? AND documentid=?", + newSpaceID, ctx.OrgID, oldSpaceID, documentID) + + if err != nil { + err = errors.Wrap(err, fmt.Sprintf("execute document activity move %s", documentID)) + } + + return +} + // Delete removes the specified document. // Remove document pages, revisions, attachments, updates the search subsystem. func (s Scope) Delete(ctx domain.RequestContext, documentID string) (rows int64, err error) { diff --git a/domain/storer.go b/domain/storer.go index 9e426e69..a202e54a 100644 --- a/domain/storer.go +++ b/domain/storer.go @@ -180,6 +180,7 @@ type DocumentStorer interface { Delete(ctx RequestContext, documentID string) (rows int64, err error) DeleteBySpace(ctx RequestContext, spaceID string) (rows int64, err error) GetVersions(ctx RequestContext, groupID string) (v []doc.Version, err error) + MoveActivity(ctx RequestContext, documentID, oldSpaceID, newSpaceID string) (err error) } // SettingStorer defines required methods for persisting global and user level settings