diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 224 |
1 files changed, 99 insertions, 125 deletions
@@ -18,7 +18,12 @@ type SearchQuery struct { Offset int64 } +type BaseResponse struct { + GlobalVars GlobalVars +} + type SearchResponse struct { + GlobalVars GlobalVars Success bool SearchResults []interface{} NumResults int @@ -31,7 +36,88 @@ type SearchResponse struct { } type DocumentResponse struct { + GlobalVars GlobalVars SearchResults interface{} + SummaryPDF string +} + +type GlobalVars struct { + Name string +} + +var globalVariables = GlobalVars{ + Name: "510K Search", +} + +func create_pdf_url(year string, knumber string) string { + year_int, _ := strconv.Atoi(year[0:2]) + if year[0] == '0' || year[0] == '1' || year[0] == '2' || year[0] == '3' || year[0] == '4' || year[0] == '5' && year[0:2] != "01" && year[0:2] != "00" { + return fmt.Sprintf("https://www.accessdata.fda.gov/cdrh_docs/pdf%d/%s.pdf", year_int, knumber) + } else { + return fmt.Sprintf("https://www.accessdata.fda.gov/cdrh_docs/pdf/%s.pdf", knumber) + } +} + +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 myOffset int64 + if r.Form["offset"] != nil { + offset, _ := strconv.ParseInt(r.FormValue("offset"), 10, 64) + myOffset = offset + if offset < 0 { + myOffset = 0 + } + } else { + offset := int64(0) + myOffset = offset + } + query := SearchQuery{ + Query: r.FormValue("query"), + MaxResults: 100, + Offset: myOffset, + } + + res, err := index.Search(query.Query, &meilisearch.SearchRequest{ + Limit: query.MaxResults, + Offset: query.Offset, + AttributesToRetrieve: []string{ + "title", + "applicant", + "submission_date", + "predicates", + "id", + }, + AttributesToCrop: []string{"full_text"}, + AttributesToHighlight: []string{"full_text"}, + HighlightPreTag: "<mark>", + HighlightPostTag: "</mark>", + }) + + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + numPages := pageCount(int(res.EstimatedTotalHits), int(query.MaxResults)) + + searchTemplate.Execute(w, SearchResponse{ + GlobalVars: globalVariables, + Success: true, + SearchResults: res.Hits, + NumResults: len(res.Hits) + int(query.Offset), + TotalResults: res.EstimatedTotalHits, + MoreResults: res.EstimatedTotalHits > query.MaxResults, + OriginalQuery: query, + Offset: query.Offset + query.MaxResults, + LastOffset: query.Offset - query.MaxResults, + NumPages: numPages, + }) + } else { + fmt.Println("query is empty") + } } func pageCount(total int, perPage int) int { @@ -58,12 +144,16 @@ func main() { http.HandleFunc("/classic/", func(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("templates/search.gtpl") - t.Execute(w, nil) + t.Execute(w, BaseResponse{ + GlobalVars: globalVariables, + }) }) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("templates/home.html") - t.Execute(w, nil) + t.Execute(w, BaseResponse{ + GlobalVars: globalVariables, + }) }) funcMap := template.FuncMap{ @@ -72,19 +162,13 @@ func main() { }, } - //searchResTemplate := template.Must(template.ParseFiles("results.gtpl")) + // Classic UI searchResTemplate := template.Must(template.New("results.gtpl").Funcs(funcMap).ParseFiles("templates/results.gtpl")) // v2.0 UI searchResultsTemplate2 := template.Must(template.New("search_results.html").Funcs(funcMap).ParseFiles("templates/search_results.html")) - //documentDetailsTemplate2 := template.Must(template.New("document_details.html").Funcs(funcMap).ParseFiles("templates/document_details.html")) documentDetailsTemplate2 := template.Must(template.ParseFiles("templates/document_details.html")) - if err != nil { - fmt.Println("Error parsing template") - os.Exit(1) - } - http.HandleFunc("/dbentry", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() fmt.Println(r.Form) @@ -119,8 +203,12 @@ func main() { "EXPEDITEDREVIEW", }}, &res) fmt.Println(res) + var year = documentID[1:3] + documentDetailsTemplate2.Execute(w, DocumentResponse{ + GlobalVars: globalVariables, SearchResults: res, + SummaryPDF: create_pdf_url(year, documentID), }) } else { fmt.Println("No ID provided") @@ -129,125 +217,11 @@ func main() { }) http.HandleFunc("/search", func(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - fmt.Println(r.Form) - if r.Form["query"] != nil || r.FormValue("query") != "" { - fmt.Println("query:", r.Form["query"]) - var myOffset int64 - if r.Form["offset"] != nil { - offset, _ := strconv.ParseInt(r.FormValue("offset"), 10, 64) - myOffset = offset - if offset < 0 { - myOffset = 0 - } - } else { - offset := int64(0) - myOffset = offset - } - query := SearchQuery{ - Query: r.FormValue("query"), - MaxResults: 100, - Offset: myOffset, - } - - res, err := index.Search(query.Query, &meilisearch.SearchRequest{ - Limit: query.MaxResults, - Offset: query.Offset, - AttributesToRetrieve: []string{ - "title", - "applicant", - "submission_date", - "predicates", - "id", - }, - AttributesToCrop: []string{"full_text"}, - AttributesToHighlight: []string{"full_text"}, - HighlightPreTag: "<mark>", - HighlightPostTag: "</mark>", - }) - - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - numPages := pageCount(int(res.EstimatedTotalHits), int(query.MaxResults)) - - searchResultsTemplate2.Execute(w, SearchResponse{ - Success: true, - SearchResults: res.Hits, - NumResults: len(res.Hits) + int(query.Offset), - TotalResults: res.EstimatedTotalHits, - MoreResults: res.EstimatedTotalHits > query.MaxResults, - OriginalQuery: query, - Offset: query.Offset + query.MaxResults, - LastOffset: query.Offset - query.MaxResults, - NumPages: numPages, - }) - } else { - fmt.Println("query is empty") - } + searchHandler(w, r, index, searchResultsTemplate2) }) http.HandleFunc("/classic/search", func(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - fmt.Println(r.Form) - if r.Form["query"] != nil || r.FormValue("query") != "" { - fmt.Println("query:", r.Form["query"]) - var myOffset int64 - if r.Form["offset"] != nil { - offset, _ := strconv.ParseInt(r.FormValue("offset"), 10, 64) - myOffset = offset - if offset < 0 { - myOffset = 0 - } - } else { - offset := int64(0) - myOffset = offset - } - query := SearchQuery{ - Query: r.FormValue("query"), - MaxResults: 100, - Offset: myOffset, - } - - res, err := index.Search(query.Query, &meilisearch.SearchRequest{ - Limit: query.MaxResults, - Offset: query.Offset, - AttributesToRetrieve: []string{ - "title", - "applicant", - "submission_date", - "predicates", - "id", - }, - AttributesToCrop: []string{"full_text"}, - AttributesToHighlight: []string{"full_text"}, - HighlightPreTag: "<mark>", - HighlightPostTag: "</mark>", - }) - - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - numPages := pageCount(int(res.EstimatedTotalHits), int(query.MaxResults)) - - searchResTemplate.Execute(w, SearchResponse{ - Success: true, - SearchResults: res.Hits, - NumResults: len(res.Hits) + int(query.Offset), - TotalResults: res.EstimatedTotalHits, - MoreResults: res.EstimatedTotalHits > query.MaxResults, - OriginalQuery: query, - Offset: query.Offset + query.MaxResults, - LastOffset: query.Offset - query.MaxResults, - NumPages: numPages, - }) - } else { - fmt.Println("query is empty") - } + searchHandler(w, r, index, searchResTemplate) }) fmt.Println("Listening on port 8080") |