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  }