rawlinp commented on a change in pull request #5225:
URL: https://github.com/apache/trafficcontrol/pull/5225#discussion_r514586912
##########
File path: traffic_ops/traffic_ops_golang/servicecategory/servicecategories.go
##########
@@ -123,89 +118,78 @@ func (serviceCategory *TOServiceCategory) Create()
(error, error, int) {
}
func (serviceCategory *TOServiceCategory) Read(h http.Header, useIMS bool)
([]interface{}, error, error, int, *time.Time) {
- tenantIDs, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx,
serviceCategory.APIInfo().User.TenantID)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for user: " +
err.Error()), http.StatusInternalServerError, nil
- }
-
api.DefaultSort(serviceCategory.APIInfo(), "name")
serviceCategories, userErr, sysErr, errCode, maxTime :=
api.GenericRead(h, serviceCategory, useIMS)
if userErr != nil || sysErr != nil {
return nil, userErr, sysErr, errCode, nil
}
- filteredServiceCategories := []interface{}{}
- for _, sc := range serviceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, tenantIDs) {
- filteredServiceCategories =
append(filteredServiceCategories, scToCheck)
- }
+ return serviceCategories, nil, nil, errCode, maxTime
+}
+
+func Update(w http.ResponseWriter, r *http.Request) {
+ inf, userErr, sysErr, errCode := api.NewInfo(r, []string{"name"}, nil)
+ if userErr != nil || sysErr != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ return
}
+ defer inf.Close()
- dsIdParam := serviceCategory.APIInfo().Params["dsId"]
+ name := inf.Params["name"]
- if dsIdParam != "" {
- dsId, err := strconv.Atoi(dsIdParam)
- if err != nil {
- return nil, errors.New("dsId query param must be an
int"), nil, http.StatusBadRequest, nil
- }
- dsTenantId, _, err :=
tenant.GetDSTenantIDByIDTx(serviceCategory.APIInfo().Tx.Tx, dsId)
+ var newSC TOServiceCategory
+ if err := json.NewDecoder(r.Body).Decode(&newSC); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- dsAllowedTenants, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx, *dsTenantId)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for
user: " + err.Error()), http.StatusInternalServerError, nil
- }
+ if err := newSC.Validate(); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- filteredSCByDS := []interface{}{}
- for _, sc := range filteredServiceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, dsAllowedTenants) {
- filteredSCByDS = append(filteredSCByDS,
scToCheck)
- }
+ var origSC TOServiceCategory
+ if err := inf.Tx.QueryRow(`SELECT name FROM service_category WHERE name
= $1`, name).Scan(&origSC.Name); err != nil {
+ if err == sql.ErrNoRows {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest,
errors.New("no service category found with name "+name), nil)
+ return
}
-
- return filteredSCByDS, nil, nil, errCode, maxTime
+ log.Errorf("MATT JACKSON in here")
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError,
nil, err)
+ return
}
+ log.Errorf("MATT JACKSON or here")
- return filteredServiceCategories, nil, nil, errCode, maxTime
-}
-
-func checkTenancy(category *tc.ServiceCategory, tenantIDs []int) bool {
- for _, tenantID := range tenantIDs {
- if tenantID == category.TenantID {
- return true
- }
+ resp, err := inf.Tx.Tx.Exec(updateQuery(), newSC.Name, name)
+ if err != nil {
+ userErr, sysErr, errCode = api.ParseDBError(err)
+ api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ return
}
- return false
+ api.CreateChangeLogRawTx(api.ApiChange, api.Updated+" Service Category:
"+newSC.Name, inf.User, inf.Tx.Tx)
Review comment:
Since we have the data, we could include the old name as well as the new
name here.
##########
File path: traffic_ops/traffic_ops_golang/servicecategory/servicecategories.go
##########
@@ -123,89 +118,78 @@ func (serviceCategory *TOServiceCategory) Create()
(error, error, int) {
}
func (serviceCategory *TOServiceCategory) Read(h http.Header, useIMS bool)
([]interface{}, error, error, int, *time.Time) {
- tenantIDs, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx,
serviceCategory.APIInfo().User.TenantID)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for user: " +
err.Error()), http.StatusInternalServerError, nil
- }
-
api.DefaultSort(serviceCategory.APIInfo(), "name")
serviceCategories, userErr, sysErr, errCode, maxTime :=
api.GenericRead(h, serviceCategory, useIMS)
if userErr != nil || sysErr != nil {
return nil, userErr, sysErr, errCode, nil
}
- filteredServiceCategories := []interface{}{}
- for _, sc := range serviceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, tenantIDs) {
- filteredServiceCategories =
append(filteredServiceCategories, scToCheck)
- }
+ return serviceCategories, nil, nil, errCode, maxTime
+}
+
+func Update(w http.ResponseWriter, r *http.Request) {
+ inf, userErr, sysErr, errCode := api.NewInfo(r, []string{"name"}, nil)
+ if userErr != nil || sysErr != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ return
}
+ defer inf.Close()
- dsIdParam := serviceCategory.APIInfo().Params["dsId"]
+ name := inf.Params["name"]
- if dsIdParam != "" {
- dsId, err := strconv.Atoi(dsIdParam)
- if err != nil {
- return nil, errors.New("dsId query param must be an
int"), nil, http.StatusBadRequest, nil
- }
- dsTenantId, _, err :=
tenant.GetDSTenantIDByIDTx(serviceCategory.APIInfo().Tx.Tx, dsId)
+ var newSC TOServiceCategory
+ if err := json.NewDecoder(r.Body).Decode(&newSC); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- dsAllowedTenants, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx, *dsTenantId)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for
user: " + err.Error()), http.StatusInternalServerError, nil
- }
+ if err := newSC.Validate(); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- filteredSCByDS := []interface{}{}
- for _, sc := range filteredServiceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, dsAllowedTenants) {
- filteredSCByDS = append(filteredSCByDS,
scToCheck)
- }
+ var origSC TOServiceCategory
+ if err := inf.Tx.QueryRow(`SELECT name FROM service_category WHERE name
= $1`, name).Scan(&origSC.Name); err != nil {
+ if err == sql.ErrNoRows {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest,
errors.New("no service category found with name "+name), nil)
+ return
}
-
- return filteredSCByDS, nil, nil, errCode, maxTime
+ log.Errorf("MATT JACKSON in here")
Review comment:
I think you forgot to remove this
##########
File path: traffic_ops/traffic_ops_golang/servicecategory/servicecategories.go
##########
@@ -123,89 +118,78 @@ func (serviceCategory *TOServiceCategory) Create()
(error, error, int) {
}
func (serviceCategory *TOServiceCategory) Read(h http.Header, useIMS bool)
([]interface{}, error, error, int, *time.Time) {
- tenantIDs, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx,
serviceCategory.APIInfo().User.TenantID)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for user: " +
err.Error()), http.StatusInternalServerError, nil
- }
-
api.DefaultSort(serviceCategory.APIInfo(), "name")
serviceCategories, userErr, sysErr, errCode, maxTime :=
api.GenericRead(h, serviceCategory, useIMS)
if userErr != nil || sysErr != nil {
return nil, userErr, sysErr, errCode, nil
}
- filteredServiceCategories := []interface{}{}
- for _, sc := range serviceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, tenantIDs) {
- filteredServiceCategories =
append(filteredServiceCategories, scToCheck)
- }
+ return serviceCategories, nil, nil, errCode, maxTime
+}
+
+func Update(w http.ResponseWriter, r *http.Request) {
+ inf, userErr, sysErr, errCode := api.NewInfo(r, []string{"name"}, nil)
+ if userErr != nil || sysErr != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ return
}
+ defer inf.Close()
- dsIdParam := serviceCategory.APIInfo().Params["dsId"]
+ name := inf.Params["name"]
- if dsIdParam != "" {
- dsId, err := strconv.Atoi(dsIdParam)
- if err != nil {
- return nil, errors.New("dsId query param must be an
int"), nil, http.StatusBadRequest, nil
- }
- dsTenantId, _, err :=
tenant.GetDSTenantIDByIDTx(serviceCategory.APIInfo().Tx.Tx, dsId)
+ var newSC TOServiceCategory
+ if err := json.NewDecoder(r.Body).Decode(&newSC); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- dsAllowedTenants, err :=
tenant.GetUserTenantIDListTx(serviceCategory.APIInfo().Tx.Tx, *dsTenantId)
- if err != nil {
- return nil, nil, errors.New("getting tenant list for
user: " + err.Error()), http.StatusInternalServerError, nil
- }
+ if err := newSC.Validate(); err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, err, nil)
+ return
+ }
- filteredSCByDS := []interface{}{}
- for _, sc := range filteredServiceCategories {
- scToCheck := sc.(*tc.ServiceCategory)
- if checkTenancy(scToCheck, dsAllowedTenants) {
- filteredSCByDS = append(filteredSCByDS,
scToCheck)
- }
+ var origSC TOServiceCategory
+ if err := inf.Tx.QueryRow(`SELECT name FROM service_category WHERE name
= $1`, name).Scan(&origSC.Name); err != nil {
+ if err == sql.ErrNoRows {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest,
errors.New("no service category found with name "+name), nil)
+ return
}
-
- return filteredSCByDS, nil, nil, errCode, maxTime
+ log.Errorf("MATT JACKSON in here")
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError,
nil, err)
+ return
}
+ log.Errorf("MATT JACKSON or here")
Review comment:
and this
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]