answer/internal/service/search_service.go

63 lines
1.5 KiB
Go
Raw Normal View History

2022-09-27 17:59:05 +08:00
package service
import (
"context"
"github.com/answerdev/answer/internal/schema"
"github.com/answerdev/answer/internal/service/search_common"
2022-11-14 18:47:22 +08:00
"github.com/answerdev/answer/internal/service/search_parser"
2022-09-27 17:59:05 +08:00
)
type SearchService struct {
2022-11-14 18:47:22 +08:00
searchParser *search_parser.SearchParser
searchRepo search_common.SearchRepo
2022-09-27 17:59:05 +08:00
}
func NewSearchService(
2022-11-14 18:47:22 +08:00
searchParser *search_parser.SearchParser,
2022-09-27 17:59:05 +08:00
searchRepo search_common.SearchRepo,
) *SearchService {
return &SearchService{
2022-11-14 18:47:22 +08:00
searchParser: searchParser,
searchRepo: searchRepo,
2022-09-27 17:59:05 +08:00
}
}
2022-11-14 18:47:22 +08:00
// Search search contents
2022-09-27 17:59:05 +08:00
func (ss *SearchService) Search(ctx context.Context, dto *schema.SearchDTO) (resp []schema.SearchResp, total int64, extra interface{}, err error) {
extra = nil
2022-10-12 16:09:20 +08:00
if dto.Page < 1 {
dto.Page = 1
}
2022-11-14 18:47:22 +08:00
// search type
searchType,
// search all
2022-11-14 18:47:22 +08:00
userID,
votes,
// search questions
2022-11-14 18:47:22 +08:00
notAccepted,
_,
views,
answers,
// search answers
2022-11-14 18:47:22 +08:00
accepted,
questionID,
_,
// common fields
2022-11-14 18:47:22 +08:00
tags,
words := ss.searchParser.ParseStructure(dto)
switch searchType {
case "all":
resp, total, err = ss.searchRepo.SearchContents(ctx, words, tags, userID, votes, dto.Page, dto.Size, dto.Order)
if err != nil {
return nil, 0, nil, err
}
case "question":
resp, total, err = ss.searchRepo.SearchQuestions(ctx, words, tags, notAccepted, views, answers, dto.Page, dto.Size, dto.Order)
2022-11-14 18:47:22 +08:00
case "answer":
resp, total, err = ss.searchRepo.SearchAnswers(ctx, words, tags, accepted, questionID, dto.Page, dto.Size, dto.Order)
2022-09-27 17:59:05 +08:00
}
2022-11-14 18:47:22 +08:00
return
2022-09-27 17:59:05 +08:00
}