github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/resourceserver/versionserver/output_of.go (about) 1 package versionserver 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "strconv" 7 8 "code.cloudfoundry.org/lager" 9 "github.com/pf-qiu/concourse/v6/atc" 10 "github.com/pf-qiu/concourse/v6/atc/api/present" 11 "github.com/pf-qiu/concourse/v6/atc/db" 12 ) 13 14 func (s *Server) ListBuildsWithVersionAsOutput(pipeline db.Pipeline) http.Handler { 15 logger := s.logger.Session("list-builds-with-version-as-output") 16 17 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 18 versionIDString := r.FormValue(":resource_config_version_id") 19 resourceName := r.FormValue(":resource_name") 20 versionID, _ := strconv.Atoi(versionIDString) 21 22 resource, found, err := pipeline.Resource(resourceName) 23 if err != nil { 24 logger.Error("failed-to-find-resource", err) 25 w.WriteHeader(http.StatusInternalServerError) 26 return 27 } 28 29 if !found { 30 logger.Debug("resource-not-found", lager.Data{"resource-name": resourceName}) 31 w.WriteHeader(http.StatusNotFound) 32 return 33 } 34 35 builds, err := pipeline.GetBuildsWithVersionAsOutput(resource.ID(), versionID) 36 if err != nil { 37 w.WriteHeader(http.StatusInternalServerError) 38 return 39 } 40 41 presentedBuilds := []atc.Build{} 42 for _, build := range builds { 43 presentedBuilds = append(presentedBuilds, present.Build(build)) 44 } 45 46 w.Header().Set("Content-Type", "application/json") 47 48 w.WriteHeader(http.StatusOK) 49 50 err = json.NewEncoder(w).Encode(presentedBuilds) 51 if err != nil { 52 logger.Error("failed-to-encode-builds", err) 53 w.WriteHeader(http.StatusInternalServerError) 54 } 55 }) 56 }