mirror of
https://github.com/Damillora/Yuriko.git
synced 2024-09-21 18:32:49 +00:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
|
package services
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"time"
|
||
|
|
||
|
"github.com/Damillora/Yuriko/pkg/database"
|
||
|
"github.com/Damillora/Yuriko/pkg/models"
|
||
|
"github.com/typesense/typesense-go/typesense/api"
|
||
|
)
|
||
|
|
||
|
type SearchResult struct {
|
||
|
Page int `json:"page"`
|
||
|
PerPage int `json:"per_page"`
|
||
|
Result []models.ArticleSearchResult `json:"result"`
|
||
|
}
|
||
|
|
||
|
func SearchArticles(q string, page int) (SearchResult, error) {
|
||
|
perPage := 10
|
||
|
searchParameters := &api.SearchCollectionParams{
|
||
|
Q: q,
|
||
|
QueryBy: []string{"title"},
|
||
|
Page: &page,
|
||
|
PerPage: &perPage,
|
||
|
}
|
||
|
searchResult, err := database.Client.Collection("articles").Documents().Search(searchParameters)
|
||
|
if err != nil {
|
||
|
log.Println("Search error: " + err.Error())
|
||
|
return SearchResult{}, err
|
||
|
}
|
||
|
var articles []models.ArticleSearchResult
|
||
|
|
||
|
for _, hit := range searchResult.Hits {
|
||
|
article := models.ArticleSearchResult{
|
||
|
Title: hit.Document["title"].(string),
|
||
|
Url: hit.Document["url"].(string),
|
||
|
Slug: hit.Document["slug"].(string),
|
||
|
Excerpt: hit.Document["excerpt"].(string),
|
||
|
HtmlMarkup: hit.Document["html"].(string),
|
||
|
PublishedAt: time.Unix(int64(hit.Document["published_at"].(float64)), 0).String(),
|
||
|
}
|
||
|
articles = append(articles, article)
|
||
|
}
|
||
|
|
||
|
return SearchResult{
|
||
|
Page: page,
|
||
|
PerPage: perPage,
|
||
|
Result: articles,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func ImportArticle(article models.ArticleCreateModel) {
|
||
|
document := article
|
||
|
|
||
|
database.Client.Collection("articles").Documents().Upsert(document)
|
||
|
|
||
|
}
|