add http handler for label PATCH
parent
c9b45b4c6d
commit
3bf4db0d5d
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue