Merge branch 'fix/1.1.3/qa' into test

This commit is contained in:
LinkinStars 2023-08-29 11:01:19 +08:00
commit 36ef2534e0
4 changed files with 40 additions and 74 deletions

View File

@ -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)
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

View File

@ -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
}

View File

@ -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]
}
}
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

View File

@ -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]
}
}
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)
}
for _, item := range list {
_, ok := CollectedMap[item.ID]
if ok {
item.Collected = true
collectedMap, err := qs.collectionCommon.SearchObjectCollected(ctx, loginUserID, objectIds)
if err != nil {
return nil, err
}
for _, item := range list {
item.Collected = collectedMap[item.ID]
}
return list, nil
}