chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
type SearchResult struct {
|
||||
// ID content ID
|
||||
ID string
|
||||
// Type content type, example: "answer", "question"
|
||||
Type string
|
||||
}
|
||||
|
||||
type SearchContent struct {
|
||||
ObjectID string `json:"objectID"`
|
||||
Title string `json:"title"`
|
||||
Type string `json:"type"`
|
||||
Content string `json:"content"`
|
||||
Answers int64 `json:"answers"`
|
||||
Status SearchContentStatus `json:"status"`
|
||||
Tags []string `json:"tags"`
|
||||
QuestionID string `json:"questionID"`
|
||||
UserID string `json:"userID"`
|
||||
Views int64 `json:"views"`
|
||||
Created int64 `json:"created"`
|
||||
Active int64 `json:"active"`
|
||||
Score int64 `json:"score"`
|
||||
HasAccepted bool `json:"hasAccepted"`
|
||||
}
|
||||
|
||||
type SearchBasicCond struct {
|
||||
// From zero-based page number
|
||||
Page int
|
||||
// Page size
|
||||
PageSize int
|
||||
|
||||
// The keywords for search.
|
||||
Words []string
|
||||
// TagIDs is a list of tag IDs.
|
||||
TagIDs [][]string
|
||||
// The object's owner user ID.
|
||||
UserID string
|
||||
// The order of the search result.
|
||||
Order SearchOrderCond
|
||||
|
||||
// Weathers the question is accepted or not. Only support search question.
|
||||
QuestionAccepted SearchAcceptedCond
|
||||
// Weathers the answer is accepted or not. Only support search answer.
|
||||
AnswerAccepted SearchAcceptedCond
|
||||
|
||||
// Only support search answer.
|
||||
QuestionID string
|
||||
|
||||
// greater than or equal to the number of votes.
|
||||
VoteAmount int
|
||||
// greater than or equal to the number of views.
|
||||
ViewAmount int
|
||||
// greater than or equal to the number of answers. Only support search question.
|
||||
AnswerAmount int
|
||||
}
|
||||
|
||||
type SearchAcceptedCond int
|
||||
type SearchContentStatus int
|
||||
type SearchOrderCond string
|
||||
|
||||
const (
|
||||
AcceptedCondAll SearchAcceptedCond = iota
|
||||
AcceptedCondTrue
|
||||
AcceptedCondFalse
|
||||
)
|
||||
|
||||
const (
|
||||
SearchContentStatusAvailable = 1
|
||||
SearchContentStatusDeleted = 10
|
||||
)
|
||||
|
||||
const (
|
||||
SearchNewestOrder SearchOrderCond = "newest"
|
||||
SearchActiveOrder SearchOrderCond = "active"
|
||||
SearchScoreOrder SearchOrderCond = "score"
|
||||
SearchRelevanceOrder SearchOrderCond = "relevance"
|
||||
)
|
||||
|
||||
type Search interface {
|
||||
Base
|
||||
Description() SearchDesc
|
||||
RegisterSyncer(ctx context.Context, syncer SearchSyncer)
|
||||
SearchContents(ctx context.Context, cond *SearchBasicCond) (res []SearchResult, total int64, err error)
|
||||
SearchQuestions(ctx context.Context, cond *SearchBasicCond) (res []SearchResult, total int64, err error)
|
||||
SearchAnswers(ctx context.Context, cond *SearchBasicCond) (res []SearchResult, total int64, err error)
|
||||
UpdateContent(ctx context.Context, content *SearchContent) (err error)
|
||||
DeleteContent(ctx context.Context, objectID string) (err error)
|
||||
}
|
||||
|
||||
type SearchDesc struct {
|
||||
// A svg icon it wil be display in search result page. optional
|
||||
Icon string `json:"icon"`
|
||||
// The link address of the search engine. optional
|
||||
Link string `json:"link"`
|
||||
}
|
||||
|
||||
type SearchSyncer interface {
|
||||
GetAnswersPage(ctx context.Context, page, pageSize int) (answerList []*SearchContent, err error)
|
||||
GetQuestionsPage(ctx context.Context, page, pageSize int) (questionList []*SearchContent, err error)
|
||||
}
|
||||
|
||||
var (
|
||||
// CallSearch is a function that calls all registered parsers
|
||||
CallSearch,
|
||||
registerSearch = MakePlugin[Search](false)
|
||||
)
|
||||
Reference in New Issue
Block a user