You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2024/10/28 02:34:48 UTC

(incubator-answer) branch dev updated (e39319da -> 7c677f31)

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

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


    from e39319da Merge branch 'release/1.4.1'
     new 5af69352 perf: optimize tag has new tag check
     new 2e6eafbb fix: add status filter when update tag rel
     new 7c677f31 fix: wrong status when enable tag rel

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 internal/repo/repo_test/tag_rel_repo_test.go |  2 +-
 internal/repo/tag/tag_rel_repo.go            | 26 +++++++++++++++++----
 internal/service/tag_common/tag_common.go    | 35 ++++++++++++++--------------
 3 files changed, 40 insertions(+), 23 deletions(-)


(incubator-answer) 03/03: fix: wrong status when enable tag rel

Posted by li...@apache.org.
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 <me...@sonui.cn>
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
 		}
 	}


(incubator-answer) 02/03: fix: add status filter when update tag rel

Posted by li...@apache.org.
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 2e6eafbb2e04035d90dc37d6dba61cce44b5b09f
Author: Sonui <me...@sonui.cn>
AuthorDate: Sun Oct 27 13:30:49 2024 +0800

    fix: add status filter when update tag rel
---
 internal/repo/tag/tag_rel_repo.go | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/internal/repo/tag/tag_rel_repo.go b/internal/repo/tag/tag_rel_repo.go
index 70187f54..08cff9d1 100644
--- a/internal/repo/tag/tag_rel_repo.go
+++ b/internal/repo/tag/tag_rel_repo.go
@@ -21,6 +21,7 @@ package tag
 
 import (
 	"context"
+
 	"github.com/apache/incubator-answer/internal/base/data"
 	"github.com/apache/incubator-answer/internal/base/handler"
 	"github.com/apache/incubator-answer/internal/base/reason"
@@ -85,7 +86,7 @@ func (tr *tagRelRepo) RecoverTagRelListByObjectID(ctx context.Context, objectID
 
 func (tr *tagRelRepo) HideTagRelListByObjectID(ctx context.Context, objectID string) (err error) {
 	objectID = uid.DeShortID(objectID)
-	_, err = tr.data.DB.Context(ctx).Where("object_id = ?", objectID).Cols("status").Update(&entity.TagRel{Status: entity.TagRelStatusHide})
+	_, err = tr.data.DB.Context(ctx).Where("object_id = ?", objectID).And("status = ?", entity.TagRelStatusAvailable).Cols("status").Update(&entity.TagRel{Status: entity.TagRelStatusHide})
 	if err != nil {
 		err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
 	}
@@ -94,7 +95,7 @@ func (tr *tagRelRepo) HideTagRelListByObjectID(ctx context.Context, objectID str
 
 func (tr *tagRelRepo) ShowTagRelListByObjectID(ctx context.Context, objectID string) (err error) {
 	objectID = uid.DeShortID(objectID)
-	_, err = tr.data.DB.Context(ctx).Where("object_id = ?", objectID).Cols("status").Update(&entity.TagRel{Status: entity.TagRelStatusAvailable})
+	_, err = tr.data.DB.Context(ctx).Where("object_id = ?", objectID).And("status = ?", entity.TagRelStatusHide).Cols("status").Update(&entity.TagRel{Status: entity.TagRelStatusAvailable})
 	if err != nil {
 		err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
 	}


(incubator-answer) 01/03: perf: optimize tag has new tag check

Posted by li...@apache.org.
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 5af69352b546a21ebabe7a570c355e3f6b995bb1
Author: Sonui <me...@sonui.cn>
AuthorDate: Sat Oct 26 18:21:14 2024 +0800

    perf: optimize tag has new tag check
---
 internal/service/tag_common/tag_common.go | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/internal/service/tag_common/tag_common.go b/internal/service/tag_common/tag_common.go
index 8010b5cd..71638e18 100644
--- a/internal/service/tag_common/tag_common.go
+++ b/internal/service/tag_common/tag_common.go
@@ -290,24 +290,18 @@ func (ts *TagCommonService) ExistRecommend(ctx context.Context, tags []*schema.T
 
 func (ts *TagCommonService) HasNewTag(ctx context.Context, tags []*schema.TagItem) (bool, error) {
 	tagNames := make([]string, 0)
-	tagMap := make(map[string]bool)
+	tagMap := make(map[string]struct{})
 	for _, item := range tags {
 		item.SlugName = strings.ReplaceAll(item.SlugName, " ", "-")
 		tagNames = append(tagNames, item.SlugName)
-		tagMap[item.SlugName] = false
+		tagMap[item.SlugName] = struct{}{}
 	}
 	list, err := ts.GetTagListByNames(ctx, tagNames)
 	if err != nil {
 		return true, err
 	}
 	for _, item := range list {
-		_, ok := tagMap[item.SlugName]
-		if ok {
-			tagMap[item.SlugName] = true
-		}
-	}
-	for _, has := range tagMap {
-		if !has {
+		if _, ok := tagMap[item.SlugName]; !ok {
 			return true, nil
 		}
 	}