package app import ( "crowsnest/internal/model" "html/template" "net/http" ) // Enpoint that returns a list of articles given search terms in the post // request of a search form. Uses the content template. func (app *App) UpSearch(w http.ResponseWriter, req *http.Request) { // construct search query searchTerms := req.FormValue("search") if searchTerms == "" { app.Index(w, req) return } // get articles articles, err := app.articles.Search(searchTerms) if err != nil { // treat as no result http.Error(w, err.Error(), http.StatusInternalServerError) return } // convert to viewmodel articleVMs := make([]*model.ArticleViewModel, 0, len(articles)) for _, a := range articles { articleVMs = append(articleVMs, a.ViewModel()) } // render template t := template.Must(template.ParseFiles( "assets/templates/article.html", "assets/templates/layout.html", "assets/templates/components/pagination.html")) data := map[string]interface{}{ "SelectedNavItemArticle": true, "ArticleVMs": &articleVMs, "Paginations": nil, } err = t.ExecuteTemplate(w, "base", data) if err != nil { http.Error(w, "Failed to render template", http.StatusInternalServerError) return } }