예제 #1
0
파일: user.go 프로젝트: ninnemana/API
func UpdateCustomerUser(rw http.ResponseWriter, r *http.Request, enc encoding.Encoder, params martini.Params) string {
	var err error
	var cu customer.CustomerUser

	qs := r.URL.Query()
	key := qs.Get("key")

	if params["id"] != "" {
		cu.Id = params["id"]
	} else if r.FormValue("id") != "" {
		cu.Id = r.FormValue("id")
	} else {
		err = errors.New("Trouble getting customer user ID")
		apierror.GenerateError("Trouble getting customer user ID", err, rw, r)
		return ""
	}

	if err = cu.Get(key); err != nil {
		apierror.GenerateError("Trouble getting customer user", err, rw, r)
		return ""
	}

	if strings.ToLower(r.Header.Get("Content-Type")) == "application/json" {
		var data []byte
		if data, err = ioutil.ReadAll(r.Body); err != nil {
			apierror.GenerateError("Trouble reading request body while updating customer user", err, rw, r)
			return ""
		}
		if err = json.Unmarshal(data, &cu); err != nil {
			apierror.GenerateError("Trouble unmarshalling json request body while updating customer user", err, rw, r)
			return ""
		}
	} else {
		name := r.FormValue("name")
		email := r.FormValue("email")
		isActive := r.FormValue("isActive")
		locationID := r.FormValue("locationID")
		isSudo := r.FormValue("isSudo")
		notCustomer := r.FormValue("notCustomer")
		if name != "" {
			cu.Name = name
		}
		if email != "" {
			cu.Email = email
		}
		if isActive != "" {
			if cu.Active, err = strconv.ParseBool(isActive); err != nil {
				cu.Active = false
			}
		}
		if locationID != "" {
			if cu.Location.Id, err = strconv.Atoi(locationID); err != nil {
				apierror.GenerateError("Trouble getting location ID", err, rw, r)
				return ""
			}
		}
		if isSudo != "" {
			if cu.Sudo, err = strconv.ParseBool(isSudo); err != nil {
				cu.Sudo = false
			}
		}
		if notCustomer != "" {
			if cu.NotCustomer, err = strconv.ParseBool(notCustomer); err != nil {
				cu.NotCustomer = false
			}
		}
	}

	if err = cu.UpdateCustomerUser(); err != nil {
		apierror.GenerateError("Trouble updating customer user", err, rw, r)
		return ""
	}

	return encoding.Must(enc.Encode(cu))
}