package main
import (
"fmt"
"html/template"
"net/http"
"strconv"
"github.com/meilisearch/meilisearch-go"
)
func searchHandler(w http.ResponseWriter, r *http.Request, index *meilisearch.Index, searchTemplate *template.Template) {
r.ParseForm()
fmt.Println(r.Form)
if r.Form["query"] != nil || r.FormValue("query") != "" {
//fmt.Println("query:", r.Form["query"])
var pageNo int64
var maxHits int64
var sortBy string
if r.Form["page"] != nil {
convertedInt, _ := strconv.ParseInt(r.FormValue("page"), 10, 64)
if convertedInt > 0 {
pageNo = convertedInt
} else {
pageNo = 1
}
} else {
pageNo = 1
}
if r.Form["maxHits"] != nil {
convertedInt, _ := strconv.ParseInt(r.FormValue("maxHits"), 10, 64)
if convertedInt > 0 {
maxHits = convertedInt
} else {
maxHits = 20
}
} else {
maxHits = 20
}
if r.Form["sort"] != nil {
if r.FormValue("sort") == "subdesc" {
sortBy = "submission_date_timestamp:desc"
} else if r.FormValue("sort") == "subasc" {
sortBy = "submission_date_timestamp:asc"
} else if r.FormValue("sort") == "decasc" {
sortBy = "decision_date_timestamp:asc"
} else if r.FormValue("sort") == "decdesc" {
sortBy = "decision_date_timestamp:desc"
} else {
sortBy = ""
}
} else {
sortBy = ""
}
if maxHits > 100 {
maxHits = 100
}
query := SearchQuery{
Query: r.FormValue("query"),
MaxResults: maxHits,
Page: pageNo,
}
var res *meilisearch.SearchResponse
fmt.Println("sort:", sortBy)
if sortBy != "" {
res, _ = index.Search(query.Query, &meilisearch.SearchRequest{
HitsPerPage: query.MaxResults,
Page: query.Page,
AttributesToRetrieve: []string{
"title",
"applicant",
"submission_date",
"predicates",
"id",
},
AttributesToCrop: []string{"full_text"},
AttributesToHighlight: []string{"full_text"},
HighlightPreTag: "",
HighlightPostTag: "",
Sort: []string{
sortBy},
})
} else {
res, _ = index.Search(query.Query, &meilisearch.SearchRequest{
HitsPerPage: query.MaxResults,
Page: query.Page,
AttributesToRetrieve: []string{
"title",
"applicant",
"submission_date",
"predicates",
"id",
},
AttributesToCrop: []string{"full_text"},
AttributesToHighlight: []string{"full_text"},
HighlightPreTag: "",
HighlightPostTag: "",
})
}
searchTemplate.Execute(w, SearchResponse{
GlobalVars: globalVariables,
Success: true,
SearchResults: res.Hits,
NumResults: int(res.TotalHits) - (int(res.TotalPages)-int(res.Page))*int(res.HitsPerPage),
TotalResults: res.TotalHits,
MoreResults: res.Page < res.TotalPages,
OriginalQuery: query,
NumPages: int(res.TotalPages),
MaxResults: maxHits,
CurPage: res.Page,
ShowPrev: res.Page > 1,
PrevPage: res.Page - 1,
NextPage: res.Page + 1,
Sort: r.FormValue("sort"),
})
} else {
// Return empty search results
searchTemplate.Execute(w, SearchResponse{
GlobalVars: globalVariables,
Success: true,
SearchResults: []interface{}{},
NumResults: 0,
TotalResults: 0,
MoreResults: false,
OriginalQuery: SearchQuery{},
NumPages: 0,
MaxResults: 0,
CurPage: 0,
ShowPrev: false,
PrevPage: 0,
NextPage: 0,
})
}
}
func documentHandler510k(w http.ResponseWriter, r *http.Request, index *meilisearch.Index, template *template.Template) {
r.ParseForm()
fmt.Println(r.Form)
var res interface{}
var documentID string = r.FormValue("id")
if r.Form["id"] != nil {
index.GetDocument(documentID, &meilisearch.DocumentQuery{
Fields: []string{
"title",
"applicant",
"decision",
"decision_date",
"full_text",
"id",
"predicates",
"submission_date",
"contact",
"STREET1",
"STREET2",
"CITY",
"STATE",
"ZIP",
"COUNTRY_CODE",
"postal_code",
"REVIEWADVISECOMM",
"PRODUCTCODE",
"STATEORSUMM",
"CLASSADVISECOMM",
"SSPINDICATOR",
"TYPE",
"THIRDPARTY",
"EXPEDITEDREVIEW",
}}, &res)
//fmt.Println(res)
var year = documentID[1:3]
template.Execute(w, DocumentResponse{
GlobalVars: globalVariables,
SearchResults: res,
SummaryPDF: create_pdf_url(year, documentID),
})
} else {
fmt.Println("No ID provided")
}
}