From c9b697318ff23e47cd2cf676ef7b54b60175223a Mon Sep 17 00:00:00 2001 From: aichy126 <16996097+aichy126@users.noreply.github.com> Date: Tue, 14 Feb 2023 15:53:35 +0800 Subject: [PATCH] add GetTagSynonymCount --- internal/repo/tag/tag_repo.go | 9 +++++++++ internal/service/tag/tag_service.go | 12 +++++++++++- internal/service/tag_common/tag_common.go | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/internal/repo/tag/tag_repo.go b/internal/repo/tag/tag_repo.go index 0c1169e0..02604cb7 100644 --- a/internal/repo/tag/tag_repo.go +++ b/internal/repo/tag/tag_repo.go @@ -8,6 +8,7 @@ import ( "github.com/answerdev/answer/internal/entity" "github.com/answerdev/answer/internal/service/tag_common" "github.com/answerdev/answer/internal/service/unique" + "github.com/answerdev/answer/pkg/converter" "github.com/segmentfault/pacman/errors" "xorm.io/builder" ) @@ -61,6 +62,14 @@ func (tr *tagRepo) UpdateTagSynonym(ctx context.Context, tagSlugNameList []strin return } +func (tr *tagRepo) GetTagSynonymCount(ctx context.Context, tagID string) (count int64, err error) { + count, err = tr.data.DB.Count(&entity.Tag{MainTagID: converter.StringToInt64(tagID), Status: entity.TagStatusAvailable}) + if err != nil { + err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() + } + return +} + // GetTagList get tag list all func (tr *tagRepo) GetTagList(ctx context.Context, tag *entity.Tag) (tagList []*entity.Tag, err error) { tagList = make([]*entity.Tag, 0) diff --git a/internal/service/tag/tag_service.go b/internal/service/tag/tag_service.go index d4c4d256..2497b2c7 100644 --- a/internal/service/tag/tag_service.go +++ b/internal/service/tag/tag_service.go @@ -50,14 +50,24 @@ func NewTagService( // RemoveTag delete tag func (ts *TagService) RemoveTag(ctx context.Context, req *schema.RemoveTagReq) (err error) { + //If the tag has associated problems, it cannot be deleted tagCount, err := ts.tagCommonService.CountTagRelByTagID(ctx, req.TagID) if err != nil { return err } - //If the tag has associated problems, it cannot be deleted if tagCount > 0 { return errors.BadRequest(reason.TagIsUsedCannotDelete) } + + //If the tag has associated problems, it cannot be deleted + tagSynonymCount, err := ts.tagRepo.GetTagSynonymCount(ctx, req.TagID) + if err != nil { + return err + } + if tagSynonymCount > 0 { + return errors.BadRequest(reason.TagIsUsedCannotDelete) + } + // tagRelRepo err = ts.tagRepo.RemoveTag(ctx, req.TagID) if err != nil { diff --git a/internal/service/tag_common/tag_common.go b/internal/service/tag_common/tag_common.go index 824a46ee..da7ec466 100644 --- a/internal/service/tag_common/tag_common.go +++ b/internal/service/tag_common/tag_common.go @@ -38,6 +38,7 @@ type TagRepo interface { RemoveTag(ctx context.Context, tagID string) (err error) UpdateTag(ctx context.Context, tag *entity.Tag) (err error) UpdateTagSynonym(ctx context.Context, tagSlugNameList []string, mainTagID int64, mainTagSlugName string) (err error) + GetTagSynonymCount(ctx context.Context, tagID string) (count int64, err error) GetTagList(ctx context.Context, tag *entity.Tag) (tagList []*entity.Tag, err error) }