From 3d032a7f48bd6714d1d3702bb49a1a5d9dcc3f20 Mon Sep 17 00:00:00 2001 From: LinkinStars Date: Tue, 29 Aug 2023 11:01:04 +0800 Subject: [PATCH] fix(answer): fix incorrect id for answer list --- internal/repo/collection/collection_repo.go | 23 +++++---- internal/service/answer_common/answer.go | 1 + internal/service/answer_service.go | 41 +++++----------- internal/service/question_common/question.go | 49 ++++++-------------- 4 files changed, 40 insertions(+), 74 deletions(-) diff --git a/internal/repo/collection/collection_repo.go b/internal/repo/collection/collection_repo.go index f21a323a..e0726886 100644 --- a/internal/repo/collection/collection_repo.go +++ b/internal/repo/collection/collection_repo.go @@ -2,9 +2,9 @@ package collection import ( "context" - "github.com/answerdev/answer/internal/base/constant" "github.com/answerdev/answer/internal/base/data" + "github.com/answerdev/answer/internal/base/handler" "github.com/answerdev/answer/internal/base/pager" "github.com/answerdev/answer/internal/base/reason" "github.com/answerdev/answer/internal/entity" @@ -142,25 +142,32 @@ func (cr *collectionRepo) GetCollectionPage(ctx context.Context, page, pageSize session = session.OrderBy("update_time desc") total, err = pager.Help(page, pageSize, collectionList, collection, session) - err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() + if err != nil { + err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() + } return } // SearchObjectCollected check object is collected or not func (cr *collectionRepo) SearchObjectCollected(ctx context.Context, userID string, objectIds []string) (map[string]bool, error) { - collectedMap := make(map[string]bool) - for k, object_id := range objectIds { - objectIds[k] = uid.DeShortID(object_id) + for i := 0; i < len(objectIds); i++ { + objectIds[i] = uid.DeShortID(objectIds[i]) } + list, err := cr.SearchByObjectIDsAndUser(ctx, userID, objectIds) if err != nil { - err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() - return collectedMap, err + return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() } + + collectedMap := make(map[string]bool) + short := handler.GetEnableShortID(ctx) for _, item := range list { + if short { + item.ObjectID = uid.EnShortID(item.ObjectID) + } collectedMap[item.ObjectID] = true } - return collectedMap, err + return collectedMap, nil } // SearchList diff --git a/internal/service/answer_common/answer.go b/internal/service/answer_common/answer.go index 1d61cd4d..4da92c07 100644 --- a/internal/service/answer_common/answer.go +++ b/internal/service/answer_common/answer.go @@ -83,6 +83,7 @@ func (as *AnswerCommon) ShowFormat(ctx context.Context, data *entity.Answer) *sc info.UserID = data.UserID info.UpdateUserID = data.LastEditUserID info.Status = data.Status + info.MemberActions = make([]*schema.PermissionMemberAction, 0) return &info } diff --git a/internal/service/answer_service.go b/internal/service/answer_service.go index 9224cfca..f1e76bf1 100644 --- a/internal/service/answer_service.go +++ b/internal/service/answer_service.go @@ -427,12 +427,11 @@ func (as *AnswerService) Get(ctx context.Context, answerID, loginUserID string) info.VoteStatus = as.voteRepo.GetVoteStatus(ctx, answerID, loginUserID) - CollectedMap, err := as.collectionCommon.SearchObjectCollected(ctx, loginUserID, []string{answerInfo.ID}) + collectedMap, err := as.collectionCommon.SearchObjectCollected(ctx, loginUserID, []string{answerInfo.ID}) if err != nil { - log.Error("CollectionFunc.SearchObjectCollected error", err) + return nil, nil, has, err } - _, ok = CollectedMap[answerInfo.ID] - if ok { + if len(collectedMap) > 0 { info.Collected = true } @@ -513,46 +512,28 @@ func (as *AnswerService) SearchFormatInfo(ctx context.Context, answers []*entity item := as.ShowFormat(ctx, info) list = append(list, item) objectIDs = append(objectIDs, info.ID) - userIDs = append(userIDs, info.UserID) - userIDs = append(userIDs, info.LastEditUserID) - if req.UserID != "" { - item.ID = uid.DeShortID(item.ID) - item.VoteStatus = as.voteRepo.GetVoteStatus(ctx, item.ID, req.UserID) - } + userIDs = append(userIDs, info.UserID, info.LastEditUserID) } + userInfoMap, err := as.userCommon.BatchUserBasicInfoByID(ctx, userIDs) if err != nil { return list, err } for _, item := range list { - _, ok := userInfoMap[item.UserID] - if ok { - item.UserInfo = userInfoMap[item.UserID] - } - _, ok = userInfoMap[item.UpdateUserID] - if ok { - item.UpdateUserInfo = userInfoMap[item.UpdateUserID] - } + item.UserInfo = userInfoMap[item.UserID] + item.UpdateUserInfo = userInfoMap[item.UpdateUserID] } - - if req.UserID == "" { + if len(req.UserID) == 0 { return list, nil } - searchObjectCollected, err := as.collectionCommon.SearchObjectCollected(ctx, req.UserID, objectIDs) + collectedMap, err := as.collectionCommon.SearchObjectCollected(ctx, req.UserID, objectIDs) if err != nil { return nil, err } - for _, item := range list { - _, ok := searchObjectCollected[item.ID] - if ok { - item.Collected = true - } - } - - for _, item := range list { - item.ID = uid.EnShortID(item.ID) + item.VoteStatus = as.voteRepo.GetVoteStatus(ctx, item.ID, req.UserID) + item.Collected = collectedMap[item.ID] item.MemberActions = permission.GetAnswerPermission(ctx, req.UserID, item.UserID, req.CanEdit, req.CanDelete) } return list, nil diff --git a/internal/service/question_common/question.go b/internal/service/question_common/question.go index e77243eb..8aebb1e9 100644 --- a/internal/service/question_common/question.go +++ b/internal/service/question_common/question.go @@ -282,17 +282,13 @@ func (qs *QuestionCommon) Info(ctx context.Context, questionID string, loginUser } showinfo.Answered = has - // login user Collected information - - CollectedMap, err := qs.collectionCommon.SearchObjectCollected(ctx, loginUserID, []string{dbinfo.ID}) + collectedMap, err := qs.collectionCommon.SearchObjectCollected(ctx, loginUserID, []string{dbinfo.ID}) if err != nil { - log.Error("CollectionFunc.SearchObjectCollected", err) + return nil, err } - _, ok = CollectedMap[dbinfo.ID] - if ok { + if len(collectedMap) > 0 { showinfo.Collected = true } - return showinfo, nil } @@ -406,9 +402,7 @@ func (qs *QuestionCommon) FormatQuestions(ctx context.Context, questionList []*e item := qs.ShowFormat(ctx, questionInfo) list = append(list, item) objectIds = append(objectIds, item.ID) - userIds = append(userIds, item.UserID) - userIds = append(userIds, item.LastEditUserID) - userIds = append(userIds, item.LastAnsweredUserID) + userIds = append(userIds, item.UserID, item.LastEditUserID, item.LastAnsweredUserID) } tagsMap, err := qs.tagCommon.BatchGetObjectTag(ctx, objectIds) if err != nil { @@ -421,38 +415,21 @@ func (qs *QuestionCommon) FormatQuestions(ctx context.Context, questionList []*e } for _, item := range list { - _, ok := tagsMap[item.ID] - if ok { - item.Tags = tagsMap[item.ID] - } - _, ok = userInfoMap[item.UserID] - if ok { - item.UserInfo = userInfoMap[item.UserID] - } - _, ok = userInfoMap[item.LastEditUserID] - if ok { - item.UpdateUserInfo = userInfoMap[item.LastEditUserID] - } - _, ok = userInfoMap[item.LastAnsweredUserID] - if ok { - item.LastAnsweredUserInfo = userInfoMap[item.LastAnsweredUserID] - } + item.Tags = tagsMap[item.ID] + item.UserInfo = userInfoMap[item.UserID] + item.UpdateUserInfo = userInfoMap[item.LastEditUserID] + item.LastAnsweredUserInfo = userInfoMap[item.LastAnsweredUserID] } - if loginUserID == "" { return list, nil } - // //login user Collected information - CollectedMap, err := qs.collectionCommon.SearchObjectCollected(ctx, loginUserID, objectIds) - if err != nil { - log.Error("CollectionFunc.SearchObjectCollected", err) - } + collectedMap, err := qs.collectionCommon.SearchObjectCollected(ctx, loginUserID, objectIds) + if err != nil { + return nil, err + } for _, item := range list { - _, ok := CollectedMap[item.ID] - if ok { - item.Collected = true - } + item.Collected = collectedMap[item.ID] } return list, nil }