update revision tag

This commit is contained in:
aichy126 2022-11-24 16:00:56 +08:00
parent 4e489736b5
commit 1e14c9ab54
2 changed files with 47 additions and 34 deletions

View File

@ -152,7 +152,8 @@ type UpdateTagReq struct {
// edit summary // edit summary
EditSummary string `validate:"omitempty" json:"edit_summary"` EditSummary string `validate:"omitempty" json:"edit_summary"`
// user id // user id
UserID string `json:"-"` UserID string `json:"-"`
IsAdmin bool `json:"-"`
} }
func (r *UpdateTagReq) Check() (errFields []*validator.FormErrorField, err error) { func (r *UpdateTagReq) Check() (errFields []*validator.FormErrorField, err error) {

View File

@ -16,7 +16,6 @@ import (
"github.com/answerdev/answer/internal/service/revision_common" "github.com/answerdev/answer/internal/service/revision_common"
"github.com/answerdev/answer/internal/service/siteinfo_common" "github.com/answerdev/answer/internal/service/siteinfo_common"
"github.com/answerdev/answer/pkg/converter" "github.com/answerdev/answer/pkg/converter"
"github.com/jinzhu/copier"
"github.com/segmentfault/pacman/errors" "github.com/segmentfault/pacman/errors"
"github.com/segmentfault/pacman/log" "github.com/segmentfault/pacman/log"
) )
@ -598,6 +597,7 @@ func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, object
} }
func (ts *TagCommonService) UpdateTag(ctx context.Context, req *schema.UpdateTagReq) (err error) { func (ts *TagCommonService) UpdateTag(ctx context.Context, req *schema.UpdateTagReq) (err error) {
var canUpdate bool
_, existUnreviewed, err := ts.revisionService.ExistUnreviewedByObjectID(ctx, req.TagID) _, existUnreviewed, err := ts.revisionService.ExistUnreviewedByObjectID(ctx, req.TagID)
if err != nil { if err != nil {
return err return err
@ -607,14 +607,6 @@ func (ts *TagCommonService) UpdateTag(ctx context.Context, req *schema.UpdateTag
return err return err
} }
tag := &entity.Tag{}
_ = copier.Copy(tag, req)
tag.ID = req.TagID
err = ts.tagRepo.UpdateTag(ctx, tag)
if err != nil {
return err
}
tagInfo, exist, err := ts.GetTagByID(ctx, req.TagID) tagInfo, exist, err := ts.GetTagByID(ctx, req.TagID)
if err != nil { if err != nil {
return err return err
@ -622,40 +614,60 @@ func (ts *TagCommonService) UpdateTag(ctx context.Context, req *schema.UpdateTag
if !exist { if !exist {
return errors.BadRequest(reason.TagNotFound) return errors.BadRequest(reason.TagNotFound)
} }
if tagInfo.MainTagID == 0 && len(req.SlugName) > 0 {
log.Debugf("tag %s update slug_name", tagInfo.SlugName) tagInfo.SlugName = req.SlugName
tagList, err := ts.tagRepo.GetTagList(ctx, &entity.Tag{MainTagID: converter.StringToInt64(tagInfo.ID)}) tagInfo.DisplayName = req.DisplayName
if err != nil { tagInfo.OriginalText = req.OriginalText
return err tagInfo.ParsedText = req.ParsedText
}
updateTagSlugNames := make([]string, 0)
for _, tag := range tagList {
updateTagSlugNames = append(updateTagSlugNames, tag.SlugName)
}
err = ts.tagRepo.UpdateTagSynonym(ctx, updateTagSlugNames, converter.StringToInt64(tagInfo.ID), tagInfo.MainTagSlugName)
if err != nil {
return err
}
}
revisionDTO := &schema.AddRevisionDTO{ revisionDTO := &schema.AddRevisionDTO{
UserID: req.UserID, UserID: req.UserID,
ObjectID: tag.ID, ObjectID: tagInfo.ID,
Title: tag.SlugName, Title: tagInfo.SlugName,
Log: req.EditSummary, Log: req.EditSummary,
} }
if !req.IsAdmin {
revisionDTO.Status = entity.RevisionUnreviewedStatus
} else {
canUpdate = true
err = ts.tagRepo.UpdateTag(ctx, tagInfo)
if err != nil {
return err
}
if tagInfo.MainTagID == 0 && len(req.SlugName) > 0 {
log.Debugf("tag %s update slug_name", tagInfo.SlugName)
tagList, err := ts.tagRepo.GetTagList(ctx, &entity.Tag{MainTagID: converter.StringToInt64(tagInfo.ID)})
if err != nil {
return err
}
updateTagSlugNames := make([]string, 0)
for _, tag := range tagList {
updateTagSlugNames = append(updateTagSlugNames, tag.SlugName)
}
err = ts.tagRepo.UpdateTagSynonym(ctx, updateTagSlugNames, converter.StringToInt64(tagInfo.ID), tagInfo.MainTagSlugName)
if err != nil {
return err
}
}
revisionDTO.Status = entity.RevisionReviewPassStatus
}
tagInfoJson, _ := json.Marshal(tagInfo) tagInfoJson, _ := json.Marshal(tagInfo)
revisionDTO.Content = string(tagInfoJson) revisionDTO.Content = string(tagInfoJson)
revisionID, err := ts.revisionService.AddRevision(ctx, revisionDTO, true) revisionID, err := ts.revisionService.AddRevision(ctx, revisionDTO, true)
if err != nil { if err != nil {
return err return err
} }
if canUpdate {
activity_queue.AddActivity(&schema.ActivityMsg{
UserID: req.UserID,
ObjectID: tagInfo.ID,
OriginalObjectID: tagInfo.ID,
ActivityTypeKey: constant.ActTagEdited,
RevisionID: revisionID,
})
}
activity_queue.AddActivity(&schema.ActivityMsg{
UserID: req.UserID,
ObjectID: tag.ID,
OriginalObjectID: tag.ID,
ActivityTypeKey: constant.ActTagEdited,
RevisionID: revisionID,
})
return return
} }