This is an automated email from the ASF dual-hosted git repository. linkinstar pushed a commit to branch dev in repository https://gitbox.apache.org/repos/asf/incubator-answer.git
commit 7c677f3193060f5a9a4ace12fa0201da05e20fc3 Author: Sonui <[email protected]> AuthorDate: Sun Oct 27 13:34:13 2024 +0800 fix: wrong status when enable tag rel --- internal/repo/repo_test/tag_rel_repo_test.go | 2 +- internal/repo/tag/tag_rel_repo.go | 21 +++++++++++++++++++-- internal/service/tag_common/tag_common.go | 23 ++++++++++++++--------- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/internal/repo/repo_test/tag_rel_repo_test.go b/internal/repo/repo_test/tag_rel_repo_test.go index f3696590..1cc96319 100644 --- a/internal/repo/repo_test/tag_rel_repo_test.go +++ b/internal/repo/repo_test/tag_rel_repo_test.go @@ -104,7 +104,7 @@ func Test_tagListRepo_GetObjectTagRelWithoutStatus(t *testing.T) { assert.NoError(t, err) assert.True(t, exist) - err = tagRelRepo.EnableTagRelByIDs(context.TODO(), ids) + err = tagRelRepo.EnableTagRelByIDs(context.TODO(), ids, false) assert.NoError(t, err) count, err = tagRelRepo.CountTagRelByTagID(context.TODO(), "10030000000000101") diff --git a/internal/repo/tag/tag_rel_repo.go b/internal/repo/tag/tag_rel_repo.go index 08cff9d1..3188295c 100644 --- a/internal/repo/tag/tag_rel_repo.go +++ b/internal/repo/tag/tag_rel_repo.go @@ -130,8 +130,12 @@ func (tr *tagRelRepo) GetObjectTagRelWithoutStatus(ctx context.Context, objectID } // EnableTagRelByIDs update tag status to available -func (tr *tagRelRepo) EnableTagRelByIDs(ctx context.Context, ids []int64) (err error) { - _, err = tr.data.DB.Context(ctx).In("id", ids).Update(&entity.TagRel{Status: entity.TagRelStatusAvailable}) +func (tr *tagRelRepo) EnableTagRelByIDs(ctx context.Context, ids []int64, hide bool) (err error) { + status := entity.TagRelStatusAvailable + if hide { + status = entity.TagRelStatusHide + } + _, err = tr.data.DB.Context(ctx).In("id", ids).Update(&entity.TagRel{Status: status}) if err != nil { err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() } @@ -186,3 +190,16 @@ func (tr *tagRelRepo) CountTagRelByTagID(ctx context.Context, tagID string) (cou } return } + +// GetTagRelDefaultStatusByObjectID get tag rel default status +func (tr *tagRelRepo) GetTagRelDefaultStatusByObjectID(ctx context.Context, objectID string) (status int, err error) { + question := entity.Question{} + exist, err := tr.data.DB.Context(ctx).ID(objectID).Cols("show", "status").Get(&question) + if err != nil { + err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() + } + if exist && (question.Show == entity.QuestionHide || question.Status == entity.QuestionStatusDeleted) { + return entity.TagRelStatusHide, nil + } + return entity.TagRelStatusAvailable, nil +} diff --git a/internal/service/tag_common/tag_common.go b/internal/service/tag_common/tag_common.go index 71638e18..ec11fe45 100644 --- a/internal/service/tag_common/tag_common.go +++ b/internal/service/tag_common/tag_common.go @@ -71,11 +71,12 @@ type TagRelRepo interface { ShowTagRelListByObjectID(ctx context.Context, objectID string) (err error) HideTagRelListByObjectID(ctx context.Context, objectID string) (err error) RemoveTagRelListByIDs(ctx context.Context, ids []int64) (err error) - EnableTagRelByIDs(ctx context.Context, ids []int64) (err error) + EnableTagRelByIDs(ctx context.Context, ids []int64, hide bool) (err error) GetObjectTagRelWithoutStatus(ctx context.Context, objectId, tagID string) (tagRel *entity.TagRel, exist bool, err error) GetObjectTagRelList(ctx context.Context, objectId string) (tagListList []*entity.TagRel, err error) BatchGetObjectTagRelList(ctx context.Context, objectIds []string) (tagListList []*entity.TagRel, err error) CountTagRelByTagID(ctx context.Context, tagID string) (count int64, err error) + GetTagRelDefaultStatusByObjectID(ctx context.Context, objectID string) (status int, err error) } // TagCommonService user service @@ -762,10 +763,9 @@ func (ts *TagCommonService) ShowTagRelListByObjectID(ctx context.Context, object // CreateOrUpdateTagRelList if tag relation is exists update status, if not create it func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, objectId string, tagIDs []string) (err error) { - addTagIDMapping := make(map[string]bool) - needRefreshTagIDs := make([]string, 0) + addTagIDMapping := make(map[string]struct{}) for _, t := range tagIDs { - addTagIDMapping[t] = true + addTagIDMapping[t] = struct{}{} } // get all old relation @@ -774,8 +774,10 @@ func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, object return err } var deleteTagRel []int64 + needRefreshTagIDs := make([]string, 0, len(oldTagRelList)+len(tagIDs)) + needRefreshTagIDs = append(needRefreshTagIDs, tagIDs...) for _, rel := range oldTagRelList { - if !addTagIDMapping[rel.TagID] { + if _, ok := addTagIDMapping[rel.TagID]; !ok { deleteTagRel = append(deleteTagRel, rel.ID) needRefreshTagIDs = append(needRefreshTagIDs, rel.TagID) } @@ -783,8 +785,11 @@ func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, object addTagRelList := make([]*entity.TagRel, 0) enableTagRelList := make([]int64, 0) + defaultTagRelStatus, err := ts.tagRelRepo.GetTagRelDefaultStatusByObjectID(ctx, objectId) + if err != nil { + return err + } for _, tagID := range tagIDs { - needRefreshTagIDs = append(needRefreshTagIDs, tagID) rel, exist, err := ts.tagRelRepo.GetObjectTagRelWithoutStatus(ctx, objectId, tagID) if err != nil { return err @@ -792,11 +797,11 @@ func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, object // if not exist add tag relation if !exist { addTagRelList = append(addTagRelList, &entity.TagRel{ - TagID: tagID, ObjectID: objectId, Status: entity.TagStatusAvailable, + TagID: tagID, ObjectID: objectId, Status: defaultTagRelStatus, }) } // if exist and has been removed, that should be enabled - if exist && rel.Status != entity.TagStatusAvailable { + if exist && rel.Status != entity.TagRelStatusAvailable && rel.Status != entity.TagRelStatusHide { enableTagRelList = append(enableTagRelList, rel.ID) } } @@ -812,7 +817,7 @@ func (ts *TagCommonService) CreateOrUpdateTagRelList(ctx context.Context, object } } if len(enableTagRelList) > 0 { - if err = ts.tagRelRepo.EnableTagRelByIDs(ctx, enableTagRelList); err != nil { + if err = ts.tagRelRepo.EnableTagRelByIDs(ctx, enableTagRelList, defaultTagRelStatus == entity.TagRelStatusHide); err != nil { return err } }
