package main 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")) err = t.ExecuteTemplate(w, "content", articleVMs) if err != nil { http.Error(w, "Failed to render template", http.StatusInternalServerError); return; } }