Skip to content

Commit e622c0b

Browse files
committed
Merge branch 'fix/1.1.3/qa' into test
2 parents 9ee06d7 + 9337f69 commit e622c0b

8 files changed

Lines changed: 69 additions & 49 deletions

File tree

internal/controller/question_controller.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -686,20 +686,19 @@ func (qc *QuestionController) UpdateQuestionInviteUser(ctx *gin.Context) {
686686
handler.HandleResponse(ctx, nil, nil)
687687
}
688688

689-
// SearchByTitleLike add question title like
690-
// @Summary add question title like
691-
// @Description add question title like
689+
// GetSimilarQuestions fuzzy query similar questions based on title
690+
// @Summary fuzzy query similar questions based on title
691+
// @Description fuzzy query similar questions based on title
692692
// @Tags Question
693693
// @Accept json
694694
// @Produce json
695695
// @Security ApiKeyAuth
696696
// @Param title query string true "title" default(string)
697697
// @Success 200 {object} handler.RespBody
698698
// @Router /answer/api/v1/question/similar [get]
699-
func (qc *QuestionController) SearchByTitleLike(ctx *gin.Context) {
699+
func (qc *QuestionController) GetSimilarQuestions(ctx *gin.Context) {
700700
title := ctx.Query("title")
701-
userID := middleware.GetLoginUserIDFromContext(ctx)
702-
resp, err := qc.questionService.SearchByTitleLike(ctx, title, userID)
701+
resp, err := qc.questionService.GetQuestionsByTitle(ctx, title)
703702
handler.HandleResponse(ctx, err, resp)
704703
}
705704

internal/controller/tag_controller.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ func (tc *TagController) SearchTagLike(ctx *gin.Context) {
4545
if handler.BindAndCheck(ctx, req) {
4646
return
4747
}
48-
req.IsAdmin = middleware.GetIsAdminFromContext(ctx)
4948
resp, err := tc.tagCommonService.SearchTagLike(ctx, req)
5049
handler.HandleResponse(ctx, err, resp)
5150
}

internal/repo/question/question_repo.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,15 @@ func (qr *questionRepo) GetQuestion(ctx context.Context, id string) (
186186
return
187187
}
188188

189-
// GetTagBySlugName get tag by slug name
190-
func (qr *questionRepo) SearchByTitleLike(ctx context.Context, title string) (questionList []*entity.Question, err error) {
189+
// GetQuestionsByTitle get question list by title
190+
func (qr *questionRepo) GetQuestionsByTitle(ctx context.Context, title string, pageSize int) (
191+
questionList []*entity.Question, err error) {
191192
questionList = make([]*entity.Question, 0)
192-
err = qr.data.DB.Context(ctx).Table("question").Where("title like ?", "%"+title+"%").Limit(10, 0).Find(&questionList)
193+
session := qr.data.DB.Context(ctx)
194+
session.Where("status != ?", entity.QuestionStatusDeleted)
195+
session.Where("title like ?", "%"+title+"%")
196+
session.Limit(pageSize)
197+
err = session.Find(&questionList)
193198
if err != nil {
194199
return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
195200
}

internal/repo/tag_common/tag_common_repo.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tag_common
33
import (
44
"context"
55
"fmt"
6+
"strings"
67

78
"github.com/answerdev/answer/internal/base/data"
89
"github.com/answerdev/answer/internal/base/pager"
@@ -56,19 +57,28 @@ func (tr *tagCommonRepo) GetTagBySlugName(ctx context.Context, slugName string)
5657
}
5758

5859
// GetTagListByName get tag list all like name
59-
func (tr *tagCommonRepo) GetTagListByName(ctx context.Context, name string, hasReserved bool) (tagList []*entity.Tag, err error) {
60-
tagList = make([]*entity.Tag, 0)
60+
func (tr *tagCommonRepo) GetTagListByName(ctx context.Context, name string, recommend, reserved bool) (tagList []*entity.Tag, err error) {
6161
cond := &entity.Tag{}
62-
session := tr.data.DB.Context(ctx).Where("")
63-
if name != "" {
64-
session.Where("slug_name LIKE LOWER(?) or display_name LIKE ?", name+"%", name+"%")
65-
} else {
66-
session.UseBool("recommend")
62+
session := tr.data.DB.Context(ctx)
63+
if len(name) > 0 {
64+
session.Where("slug_name LIKE ? OR display_name LIKE ?", strings.ToLower(name)+"%", name+"%")
65+
}
66+
var columns []string
67+
if recommend {
68+
columns = append(columns, "recommend")
6769
cond.Recommend = true
6870
}
71+
if reserved {
72+
columns = append(columns, "reserved")
73+
cond.Reserved = true
74+
}
75+
if len(columns) > 0 {
76+
session.UseBool(columns...)
77+
}
6978
session.Where(builder.Eq{"status": entity.TagStatusAvailable})
70-
session.Asc("slug_name")
71-
err = session.OrderBy("recommend desc,reserved desc,id desc").Find(&tagList, cond)
79+
80+
tagList = make([]*entity.Tag, 0)
81+
err = session.OrderBy("recommend DESC,reserved DESC,slug_name ASC").Find(&tagList, cond)
7282
if err != nil {
7383
err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
7484
}

internal/router/answer_api_router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ func (a *AnswerAPIRouter) RegisterAnswerAPIRouter(r *gin.RouterGroup) {
203203
r.PUT("/question/status", a.questionController.CloseQuestion)
204204
r.PUT("/question/operation", a.questionController.OperationQuestion)
205205
r.PUT("/question/reopen", a.questionController.ReopenQuestion)
206-
r.GET("/question/similar", a.questionController.SearchByTitleLike)
206+
r.GET("/question/similar", a.questionController.GetSimilarQuestions)
207207

208208
// answer
209209
r.POST("/answer", a.answerController.Add)

internal/service/question_common/question.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type QuestionRepo interface {
4040
UpdateQuestionStatus(ctx context.Context, question *entity.Question) (err error)
4141
UpdateQuestionStatusWithOutUpdateTime(ctx context.Context, question *entity.Question) (err error)
4242
UpdateQuestionOperation(ctx context.Context, question *entity.Question) (err error)
43-
SearchByTitleLike(ctx context.Context, title string) (questionList []*entity.Question, err error)
43+
GetQuestionsByTitle(ctx context.Context, title string, pageSize int) (questionList []*entity.Question, err error)
4444
UpdatePvCount(ctx context.Context, questionID string) (err error)
4545
UpdateAnswerCount(ctx context.Context, questionID string, num int) (err error)
4646
UpdateCollectionCount(ctx context.Context, questionID string, num int) (err error)

internal/service/question_service.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,14 +1103,18 @@ func (qs *QuestionService) SearchUserTopList(ctx context.Context, userName strin
11031103
return userQuestionlist, userAnswerlist, nil
11041104
}
11051105

1106-
// SearchByTitleLike
1107-
func (qs *QuestionService) SearchByTitleLike(ctx context.Context, title string, loginUserID string) ([]*schema.QuestionBaseInfo, error) {
1108-
list := make([]*schema.QuestionBaseInfo, 0)
1109-
dblist, err := qs.questionRepo.SearchByTitleLike(ctx, title)
1106+
// GetQuestionsByTitle get questions by title
1107+
func (qs *QuestionService) GetQuestionsByTitle(ctx context.Context, title string) (
1108+
resp []*schema.QuestionBaseInfo, err error) {
1109+
resp = make([]*schema.QuestionBaseInfo, 0)
1110+
if len(title) == 0 {
1111+
return resp, nil
1112+
}
1113+
questions, err := qs.questionRepo.GetQuestionsByTitle(ctx, title, 10)
11101114
if err != nil {
1111-
return list, err
1115+
return resp, err
11121116
}
1113-
for _, question := range dblist {
1117+
for _, question := range questions {
11141118
item := &schema.QuestionBaseInfo{}
11151119
item.ID = question.ID
11161120
item.Title = question.Title
@@ -1125,10 +1129,9 @@ func (qs *QuestionService) SearchByTitleLike(ctx context.Context, title string,
11251129
if question.AcceptedAnswerID != "0" {
11261130
item.AcceptedAnswer = true
11271131
}
1128-
list = append(list, item)
1132+
resp = append(resp, item)
11291133
}
1130-
1131-
return list, nil
1134+
return resp, nil
11321135
}
11331136

11341137
// SimilarQuestion

internal/service/tag_common/tag_common.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type TagCommonRepo interface {
2424
AddTagList(ctx context.Context, tagList []*entity.Tag) (err error)
2525
GetTagListByIDs(ctx context.Context, ids []string) (tagList []*entity.Tag, err error)
2626
GetTagBySlugName(ctx context.Context, slugName string) (tagInfo *entity.Tag, exist bool, err error)
27-
GetTagListByName(ctx context.Context, name string, hasReserved bool) (tagList []*entity.Tag, err error)
27+
GetTagListByName(ctx context.Context, name string, recommend, reserved bool) (tagList []*entity.Tag, err error)
2828
GetTagListByNames(ctx context.Context, names []string) (tagList []*entity.Tag, err error)
2929
GetTagByID(ctx context.Context, tagID string, includeDeleted bool) (tag *entity.Tag, exist bool, err error)
3030
GetTagPage(ctx context.Context, page, pageSize int, tag *entity.Tag, queryCond string) (tagList []*entity.Tag, total int64, err error)
@@ -86,7 +86,7 @@ func NewTagCommonService(
8686

8787
// SearchTagLike get tag list all
8888
func (ts *TagCommonService) SearchTagLike(ctx context.Context, req *schema.SearchTagLikeReq) (resp []schema.SearchTagLikeResp, err error) {
89-
tags, err := ts.tagCommonRepo.GetTagListByName(ctx, req.Tag, req.IsAdmin)
89+
tags, err := ts.tagCommonRepo.GetTagListByName(ctx, req.Tag, len(req.Tag) == 0, false)
9090
if err != nil {
9191
return
9292
}
@@ -97,35 +97,39 @@ func (ts *TagCommonService) SearchTagLike(ctx context.Context, req *schema.Searc
9797
mainTagId = append(mainTagId, converter.IntToString(tag.MainTagID))
9898
}
9999
}
100-
mainTagList, err := ts.tagCommonRepo.GetTagListByIDs(ctx, mainTagId)
101-
if err != nil {
102-
return
103-
}
104100
mainTagMap := make(map[string]*entity.Tag)
105-
for _, tag := range mainTagList {
106-
mainTagMap[tag.ID] = tag
101+
if len(mainTagId) > 0 {
102+
mainTagList, err := ts.tagCommonRepo.GetTagListByIDs(ctx, mainTagId)
103+
if err != nil {
104+
return nil, err
105+
}
106+
for _, tag := range mainTagList {
107+
mainTagMap[tag.ID] = tag
108+
}
107109
}
108110
for _, tag := range tags {
109-
if tag.MainTagID != 0 {
110-
_, ok := mainTagMap[converter.IntToString(tag.MainTagID)]
111-
if ok {
112-
tag.SlugName = mainTagMap[converter.IntToString(tag.MainTagID)].SlugName
113-
tag.DisplayName = mainTagMap[converter.IntToString(tag.MainTagID)].DisplayName
114-
tag.Reserved = mainTagMap[converter.IntToString(tag.MainTagID)].Reserved
115-
tag.Recommend = mainTagMap[converter.IntToString(tag.MainTagID)].Recommend
116-
}
111+
if tag.MainTagID == 0 {
112+
continue
113+
}
114+
mainTagID := converter.IntToString(tag.MainTagID)
115+
if _, ok := mainTagMap[mainTagID]; ok {
116+
tag.SlugName = mainTagMap[mainTagID].SlugName
117+
tag.DisplayName = mainTagMap[mainTagID].DisplayName
118+
tag.Reserved = mainTagMap[mainTagID].Reserved
119+
tag.Recommend = mainTagMap[mainTagID].Recommend
117120
}
118121
}
119-
RepetitiveTag := make(map[string]bool)
122+
resp = make([]schema.SearchTagLikeResp, 0)
123+
repetitiveTag := make(map[string]bool)
120124
for _, tag := range tags {
121-
if _, ok := RepetitiveTag[tag.SlugName]; !ok {
125+
if _, ok := repetitiveTag[tag.SlugName]; !ok {
122126
item := schema.SearchTagLikeResp{}
123127
item.SlugName = tag.SlugName
124128
item.DisplayName = tag.DisplayName
125129
item.Recommend = tag.Recommend
126130
item.Reserved = tag.Reserved
127131
resp = append(resp, item)
128-
RepetitiveTag[tag.SlugName] = true
132+
repetitiveTag[tag.SlugName] = true
129133
}
130134
}
131135
return resp, nil

0 commit comments

Comments
 (0)