github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/registry/regserver/handlers/search.go (about) 1 package handlers 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 apiutil "github.com/qri-io/qri/api/util" 8 qhttp "github.com/qri-io/qri/lib/http" 9 "github.com/qri-io/qri/registry" 10 ) 11 12 const ( 13 defaultOffset = 0 14 defaultLimit = 25 15 ) 16 17 // NewSearchHandler creates a search handler function taht operates on a *registry.Searchable 18 func NewSearchHandler(s registry.Searchable) http.HandlerFunc { 19 return func(w http.ResponseWriter, r *http.Request) { 20 p := ®istry.SearchParams{} 21 if r.Header.Get("Content-Type") == qhttp.JSONMimeType && r.Method == http.MethodPost { 22 if err := json.NewDecoder(r.Body).Decode(p); err != nil { 23 apiutil.WriteErrResponse(w, http.StatusBadRequest, err) 24 return 25 } 26 if p.Limit == 0 { 27 p.Limit = defaultLimit 28 } 29 } else { 30 p.Limit = apiutil.ReqParamInt(r, "limit", defaultLimit) 31 p.Offset = apiutil.ReqParamInt(r, "offset", defaultOffset) 32 p.Q = r.FormValue("q") 33 } 34 results, err := s.Search(*p) 35 if err != nil { 36 apiutil.WriteErrResponse(w, http.StatusBadRequest, err) 37 return 38 } 39 apiutil.WriteResponse(w, results) 40 } 41 }