Use PAS UI
This commit is contained in:
@@ -18,8 +18,8 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"api-cds-search/cmd/database/table"
|
||||
"api-cds-search/cmd/model"
|
||||
"api-cds-search/cmd/ui"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
@@ -33,7 +33,7 @@ import (
|
||||
)
|
||||
|
||||
type fuzzyResult struct {
|
||||
CDSViewTechnicalName string
|
||||
CDSViewTechnicalName table.TechnicalName
|
||||
hits int
|
||||
perfectHits int
|
||||
averageDistance float32
|
||||
@@ -54,7 +54,7 @@ var (
|
||||
ErrNoResults = errors.New("no results")
|
||||
)
|
||||
|
||||
var searchTargets map[string][]string = make(map[string][]string)
|
||||
var searchTargets map[table.TechnicalName][]string = make(map[table.TechnicalName][]string)
|
||||
var resultsBuffer map[string]*resultBuffer = make(map[string]*resultBuffer)
|
||||
|
||||
func Load() error {
|
||||
@@ -82,8 +82,8 @@ func Load() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetSearchTerm(r *http.Request) string {
|
||||
return strings.ToLower(r.URL.Query().Get("q"))
|
||||
func GetSearchTerm(q string) string {
|
||||
return strings.ToLower(q)
|
||||
}
|
||||
|
||||
func GetPage(r *http.Request) int {
|
||||
@@ -195,26 +195,7 @@ func BuildBuffer(searchTerm string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func HandleSearch(w http.ResponseWriter, r *http.Request) {
|
||||
searchTerm := GetSearchTerm(r)
|
||||
|
||||
buffer, err := GetBuffer(searchTerm)
|
||||
if err != nil {
|
||||
err := BuildBuffer(searchTerm)
|
||||
if err != nil {
|
||||
err := ui.Template.ExecuteTemplate(w, "search-placeholder-no-result", nil)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
buffer, _ = GetBuffer(searchTerm)
|
||||
}
|
||||
|
||||
buffer.mu.Lock()
|
||||
defer buffer.mu.Unlock()
|
||||
|
||||
page := GetPage(r)
|
||||
func GetPages(buffer *resultBuffer, p int) (int, int) {
|
||||
var maxPage int
|
||||
if buffer.hits <= pageStep {
|
||||
maxPage = 0
|
||||
@@ -222,9 +203,17 @@ func HandleSearch(w http.ResponseWriter, r *http.Request) {
|
||||
maxPage = (buffer.hits / pageStep)
|
||||
}
|
||||
|
||||
if page+1 > maxPage {
|
||||
page = maxPage
|
||||
if p+1 > maxPage {
|
||||
return maxPage, maxPage
|
||||
} else if p < 0 {
|
||||
return 0, maxPage
|
||||
}
|
||||
return p, maxPage
|
||||
}
|
||||
|
||||
func Search(buffer *resultBuffer, page int, maxPage int) *model.ResultsModel {
|
||||
buffer.mu.Lock()
|
||||
defer buffer.mu.Unlock()
|
||||
|
||||
resultsModel := model.NewResultsModel()
|
||||
for i := page * pageStep; i < page*pageStep+pageStep; i++ {
|
||||
@@ -241,17 +230,70 @@ func HandleSearch(w http.ResponseWriter, r *http.Request) {
|
||||
resultsModel.AppendResultsModelViews(cdsView, result.score)
|
||||
}
|
||||
|
||||
resultsModel.SearchTerm = searchTerm
|
||||
resultsModel.CurrentPage = page
|
||||
resultsModel.MaxPage = maxPage
|
||||
|
||||
err = ui.Template.ExecuteTemplate(w, "results", resultsModel)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
return resultsModel
|
||||
}
|
||||
|
||||
/*
|
||||
func HandleSearch(w http.ResponseWriter, r *http.Request) {
|
||||
searchTerm := GetSearchTerm(r)
|
||||
|
||||
buffer, err := GetBuffer(searchTerm)
|
||||
if err != nil {
|
||||
err := BuildBuffer(searchTerm)
|
||||
if err != nil {
|
||||
err := ui.Template.ExecuteTemplate(w, "search-placeholder-no-result", nil)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
buffer, _ = GetBuffer(searchTerm)
|
||||
}
|
||||
|
||||
buffer.mu.Lock()
|
||||
defer buffer.mu.Unlock()
|
||||
|
||||
page := GetPage(r)
|
||||
var maxPage int
|
||||
if buffer.hits <= pageStep {
|
||||
maxPage = 0
|
||||
} else {
|
||||
maxPage = (buffer.hits / pageStep)
|
||||
}
|
||||
|
||||
if page+1 > maxPage {
|
||||
page = maxPage
|
||||
}
|
||||
|
||||
resultsModel := model.NewResultsModel()
|
||||
for i := page * pageStep; i < page*pageStep+pageStep; i++ {
|
||||
if i > len(buffer.results)-1 {
|
||||
break
|
||||
}
|
||||
result := buffer.results[i]
|
||||
cdsView, err := model.GetCDSViewModel(result.CDSViewTechnicalName)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
continue
|
||||
}
|
||||
|
||||
resultsModel.AppendResultsModelViews(cdsView, result.score)
|
||||
}
|
||||
|
||||
resultsModel.SearchTerm = searchTerm
|
||||
resultsModel.CurrentPage = page
|
||||
resultsModel.MaxPage = maxPage
|
||||
|
||||
err = ui.Template.ExecuteTemplate(w, "results", resultsModel)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
*/
|
||||
func ClearOldBuffers() {
|
||||
for key, buffer := range resultsBuffer {
|
||||
if time.Since(buffer.createdAt) >= time.Minute*10 {
|
||||
|
||||
Reference in New Issue
Block a user