add http handler for label PATCH

pull/10616/head
Jade McGough 2018-12-18 01:38:49 -08:00
parent c9b45b4c6d
commit 3bf4db0d5d
2 changed files with 67 additions and 11 deletions

View File

@ -190,6 +190,63 @@ func decodePostLabelRequest(ctx context.Context, r *http.Request) (*postLabelReq
return label, nil
}
type patchLabelRequest struct {
label *plat.Label
upd plat.LabelUpdate
}
func decodePatchLabelRequest(ctx context.Context, r *http.Request) (*patchLabelRequest, error) {
params := httprouter.ParamsFromContext(ctx)
id := params.ByName("id")
if id == "" {
return nil, kerrors.InvalidDataf("url missing resource id")
}
name := params.ByName("name")
if name == "" {
return nil, kerrors.InvalidDataf("label name is missing")
}
var rid plat.ID
if err := rid.DecodeFromString(id); err != nil {
return nil, err
}
upd := &plat.LabelUpdate{}
if err := json.NewDecoder(r.Body).Decode(upd); err != nil {
return nil, err
}
return &patchLabelRequest{
label: &plat.Label{ResourceID: rid, Name: name},
upd: *upd,
}, nil
}
// newPatchLabelHandler returns a handler func for a PATCH to /labels endpoints
func newPatchLabelHandler(s plat.LabelService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
req, err := decodePatchLabelRequest(ctx, r)
if err != nil {
EncodeError(ctx, err, w)
return
}
label, err := s.UpdateLabel(ctx, req.label, req.upd)
if err != nil {
EncodeError(ctx, err, w)
return
}
if err := encodeResponse(ctx, w, http.StatusOK, newLabelResponse(label)); err != nil {
EncodeError(ctx, err, w)
return
}
}
}
// newDeleteLabelHandler returns a handler func for a DELETE to /labels endpoints
func newDeleteLabelHandler(s plat.LabelService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
@ -227,22 +284,20 @@ func decodeDeleteLabelRequest(ctx context.Context, r *http.Request) (*deleteLabe
return nil, kerrors.InvalidDataf("url missing resource id")
}
name := params.ByName("name")
if name == "" {
return nil, kerrors.InvalidDataf("label name is missing")
}
var rid plat.ID
if err := rid.DecodeFromString(id); err != nil {
return nil, err
}
label := &deleteLabelRequest{}
if err := json.NewDecoder(r.Body).Decode(label); err != nil {
return nil, err
}
if label.Name == "" {
return nil, kerrors.InvalidDataf("label name is missing")
}
label.ResourceID = rid
return label, nil
return &deleteLabelRequest{
Name: name,
ResourceID: rid,
}, nil
}
// FindLabels returns a slice of labels

View File

@ -58,6 +58,7 @@ func NewViewHandler(mappingService platform.UserResourceMappingService, labelSer
h.HandlerFunc("GET", viewsIDLabelsPath, newGetLabelsHandler(h.LabelService))
h.HandlerFunc("POST", viewsIDLabelsPath, newPostLabelHandler(h.LabelService))
h.HandlerFunc("DELETE", viewsIDLabelsNamePath, newDeleteLabelHandler(h.LabelService))
h.HandlerFunc("PATCH", viewsIDLabelsNamePath, newPatchLabelHandler(h.LabelService))
return h
}