github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/clib/search.go (about)

     1  // Package clib - Content managed by Project Forge, see [projectforge.md] for details.
     2  package clib
     3  
     4  import (
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/kyleu/dbaudit/app"
     9  	"github.com/kyleu/dbaudit/app/controller"
    10  	"github.com/kyleu/dbaudit/app/controller/cutil"
    11  	"github.com/kyleu/dbaudit/app/lib/search"
    12  	"github.com/kyleu/dbaudit/views/vsearch"
    13  )
    14  
    15  const searchKey = "search"
    16  
    17  func Search(w http.ResponseWriter, r *http.Request) {
    18  	controller.Act(searchKey, w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
    19  		q := r.URL.Query().Get("q")
    20  		params := &search.Params{Q: q, PS: ps.Params}
    21  		results, errs := search.Search(ps.Context, params, as, ps)
    22  		ps.SetTitleAndData("Search Results", results)
    23  		if q != "" {
    24  			ps.Title = fmt.Sprintf("[%s] %s", q, ps.Title)
    25  		}
    26  		if len(results) == 1 && results[0].URL != "" {
    27  			return controller.FlashAndRedir(true, "single search result found", results[0].URL, w, ps)
    28  		}
    29  		ps.DefaultNavIcon = searchKey
    30  		bc := []string{"Search||/search"}
    31  		if q != "" {
    32  			bc = append(bc, q)
    33  		}
    34  		return controller.Render(w, r, as, &vsearch.Results{Params: params, Results: results, Errors: errs}, ps, bc...)
    35  	})
    36  }