This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-answer.git

commit 5546bb55ea683927c2d3f51977a0da2d741d2734
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
                }
        }

Reply via email to