Use PAS UI

This commit is contained in:
2025-05-20 20:41:26 +02:00
parent 90f1c4738e
commit 6b8ae2f236
17 changed files with 794 additions and 100 deletions

View File

@@ -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 {