in api/internal/handler/service/service.go [202:239]
func (h *Handler) Update(c droplet.Context) (interface{}, error) {
input := c.Input().(*UpdateInput)
// check if ID in body is equal ID in path
if err := handler.IDCompare(input.ID, input.Service.ID); err != nil {
return &data.SpecCodeResponse{StatusCode: http.StatusBadRequest}, err
}
if input.ID != "" {
input.Service.ID = input.ID
}
if input.UpstreamID != nil {
upstreamID := utils.InterfaceToString(input.UpstreamID)
_, err := h.upstreamStore.Get(c.Context(), upstreamID)
if err != nil {
if err == data.ErrNotFound {
return &data.SpecCodeResponse{StatusCode: http.StatusBadRequest},
fmt.Errorf("upstream id: %s not found", input.UpstreamID)
}
return &data.SpecCodeResponse{StatusCode: http.StatusBadRequest}, err
}
}
// check name existed
ret, err := handler.NameExistCheck(c.Context(), h.serviceStore, "service", input.Name, input.ID)
if err != nil {
return ret, err
}
// update or create(if not exists)
res, err := h.serviceStore.Update(c.Context(), &input.Service, true)
if err != nil {
return handler.SpecCodeResponse(err), err
}
return res, nil
}