You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by mi...@apache.org on 2018/04/06 20:45:56 UTC
[incubator-trafficcontrol] 06/15: removed the PUT for
profileparameters because it isnt relevant
This is an automated email from the ASF dual-hosted git repository.
mitchell852 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit 95f7a1ef269aebab537dca29b0efa127ebb3b0d8
Author: Dewayne Richardson <de...@apache.org>
AuthorDate: Tue Apr 3 12:30:50 2018 -0600
removed the PUT for profileparameters because it isnt relevant
---
.../profileparameter/profile_parameters.go | 127 ++++++---------------
.../profileparameter/profile_parameters_test.go | 19 ++-
traffic_ops/traffic_ops_golang/routes.go | 1 -
3 files changed, 46 insertions(+), 101 deletions(-)
diff --git a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
index 893a792..696cfef 100644
--- a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
+++ b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters.go
@@ -37,6 +37,11 @@ import (
"github.com/lib/pq"
)
+const (
+ ProfileIDQueryParam = "profileId"
+ ParameterIDQueryParam = "parameterId"
+)
+
//we need a type alias to define functions on
type TOProfileParameter v13.ProfileParameterNullable
@@ -48,23 +53,29 @@ func GetRefType() *TOProfileParameter {
}
func (pp TOProfileParameter) GetKeyFieldsInfo() []api.KeyFieldInfo {
- return []api.KeyFieldInfo{{"profile", api.GetIntKey}, {"parameter", api.GetIntKey}}
+ return []api.KeyFieldInfo{{ProfileIDQueryParam, api.GetIntKey}, {ParameterIDQueryParam, api.GetIntKey}}
}
//Implementation of the Identifier, Validator interface functions
func (pp TOProfileParameter) GetKeys() (map[string]interface{}, bool) {
- if pp.ProfileId == nil {
- return map[string]interface{}{"profile": 0}, false
+ if pp.ProfileID == nil {
+ return map[string]interface{}{ProfileIDQueryParam: 0}, false
}
- if pp.ParameterId == nil {
- return map[string]interface{}{"parameter": 0}, false
+ if pp.ParameterID == nil {
+ return map[string]interface{}{ParameterIDQueryParam: 0}, false
}
- return map[string]interface{}{"id": *pp.Profile}, true
+ keys := make(map[string]interface{})
+ profileID := *pp.ProfileID
+ parameterID := *pp.ParameterID
+
+ keys[ProfileIDQueryParam] = profileID
+ keys[ParameterIDQueryParam] = parameterID
+ return keys, true
}
func (pp *TOProfileParameter) GetAuditName() string {
- if pp.ProfileId != nil {
- return strconv.Itoa(*pp.ProfileId) + "-" + strconv.Itoa(*pp.ParameterId)
+ if pp.ProfileID != nil {
+ return strconv.Itoa(*pp.ProfileID) + "-" + strconv.Itoa(*pp.ParameterID)
}
return "unknown"
}
@@ -74,19 +85,19 @@ func (pp *TOProfileParameter) GetType() string {
}
func (pp *TOProfileParameter) SetKeys(keys map[string]interface{}) {
- profId, _ := keys["profile"].(int) //this utilizes the non panicking type assertion, if the thrown away ok variable is false i will be the zero of the type, 0 here.
- pp.ProfileId = &profId
+ profId, _ := keys[ProfileIDQueryParam].(int) //this utilizes the non panicking type assertion, if the thrown away ok variable is false i will be the zero of the type, 0 here.
+ pp.ProfileID = &profId
- paramId, _ := keys["parameter"].(int) //this utilizes the non panicking type assertion, if the thrown away ok variable is false i will be the zero of the type, 0 here.
- pp.ParameterId = ¶mId
+ paramId, _ := keys[ParameterIDQueryParam].(int) //this utilizes the non panicking type assertion, if the thrown away ok variable is false i will be the zero of the type, 0 here.
+ pp.ParameterID = ¶mId
}
// Validate fulfills the api.Validator interface
-func (pp TOProfileParameter) Validate(db *sqlx.DB) []error {
+func (pp *TOProfileParameter) Validate(db *sqlx.DB) []error {
errs := validation.Errors{
- "profile": validation.Validate(pp.Profile, validation.Required),
- "parameter": validation.Validate(pp.Parameter, validation.Required),
+ "profile": validation.Validate(pp.ProfileID, validation.Required),
+ "parameter": validation.Validate(pp.ParameterID, validation.Required),
}
return tovalidate.ToErrors(errs)
@@ -152,7 +163,7 @@ func (pp *TOProfileParameter) Create(db *sqlx.DB, user auth.CurrentUser) (error,
return tc.DBError, tc.SystemError
}
- pp.SetKeys(map[string]interface{}{"profile": profile, "parameter": parameter})
+ pp.SetKeys(map[string]interface{}{ProfileIDQueryParam: profile, ParameterIDQueryParam: parameter})
pp.LastUpdated = &lastUpdated
err = tx.Commit()
if err != nil {
@@ -167,8 +178,8 @@ func insertQuery() string {
query := `INSERT INTO profile_parameter (
profile,
parameter) VALUES (
-:profile,
-:parameter) RETURNING profile_profile,last_updated`
+:profile_id,
+:parameter_id) RETURNING profile, parameter, last_updated`
return query
}
@@ -178,9 +189,9 @@ func (pp *TOProfileParameter) Read(db *sqlx.DB, parameters map[string]string, us
// Query Parameters to Database Query column mappings
// see the fields mapped in the SQL query
queryParamsToQueryCols := map[string]dbhelpers.WhereColumnInfo{
- "profile": dbhelpers.WhereColumnInfo{"pp.profile", nil},
- "parameter": dbhelpers.WhereColumnInfo{"pp.parameter", nil},
- "last_updated": dbhelpers.WhereColumnInfo{"pp.last_updated", nil},
+ "profileId": dbhelpers.WhereColumnInfo{"pp.profile", nil},
+ "parameterId": dbhelpers.WhereColumnInfo{"pp.parameter", nil},
+ "lastUpdated": dbhelpers.WhereColumnInfo{"pp.last_updated", nil},
}
where, orderBy, queryValues, errs := dbhelpers.BuildWhereAndOrderBy(parameters, queryParamsToQueryCols)
@@ -212,70 +223,6 @@ func (pp *TOProfileParameter) Read(db *sqlx.DB, parameters map[string]string, us
}
-//The TOProfileParameter implementation of the Updater interface
-//all implementations of Updater should use transactions and return the proper errorType
-//ParsePQUniqueConstraintError is used to determine if a parameter with conflicting values exists
-//if so, it will return an errorType of DataConflict and the type should be appended to the
-//generic error message returned
-func (pp *TOProfileParameter) Update(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiErrorType) {
- rollbackTransaction := true
- tx, err := db.Beginx()
- defer func() {
- if tx == nil || !rollbackTransaction {
- return
- }
- err := tx.Rollback()
- if err != nil {
- log.Errorln(errors.New("rolling back transaction: " + err.Error()))
- }
- }()
-
- if err != nil {
- log.Error.Printf("could not begin transaction: %v", err)
- return tc.DBError, tc.SystemError
- }
- log.Debugf("about to run exec query: %s with parameter: %++v", updateQuery(), pp)
- resultRows, err := tx.NamedQuery(updateQuery(), pp)
- if err != nil {
- if pqErr, ok := err.(*pq.Error); ok {
- err, eType := dbhelpers.ParsePQUniqueConstraintError(pqErr)
- if eType == tc.DataConflictError {
- return errors.New("a parameter with " + err.Error()), eType
- }
- return err, eType
- }
- log.Errorf("received error: %++v from update execution", err)
- return tc.DBError, tc.SystemError
- }
- defer resultRows.Close()
-
- // get LastUpdated field -- updated by trigger in the db
- var lastUpdated tc.TimeNoMod
- rowsAffected := 0
- for resultRows.Next() {
- rowsAffected++
- if err := resultRows.Scan(&lastUpdated); err != nil {
- log.Error.Printf("could not scan lastUpdated from insert: %s\n", err)
- return tc.DBError, tc.SystemError
- }
- }
- log.Debugf("lastUpdated: %++v", lastUpdated)
- pp.LastUpdated = &lastUpdated
- if rowsAffected != 1 {
- if rowsAffected < 1 {
- return errors.New("no parameter found with this id"), tc.DataMissingError
- }
- return fmt.Errorf("this update affected too many rows: %d", rowsAffected), tc.SystemError
- }
- err = tx.Commit()
- if err != nil {
- log.Errorln("Could not commit transaction: ", err)
- return tc.DBError, tc.SystemError
- }
- rollbackTransaction = false
- return nil, tc.NoError
-}
-
//The Parameter implementation of the Deleter interface
//all implementations of Deleter should use transactions and return the proper errorType
func (pp *TOProfileParameter) Delete(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiErrorType) {
@@ -338,14 +285,16 @@ JOIN parameter param ON param.id = pp.parameter`
func updateQuery() string {
query := `UPDATE
profile_parameter SET
-profile=:profile,
-parameter=:parameter
-WHERE id=:id RETURNING last_updated`
+profile=:profile_id,
+parameter=:parameter_id
+WHERE profile=:profile_id AND
+ parameter = :parameter_id
+ RETURNING last_updated`
return query
}
func deleteQuery() string {
query := `DELETE FROM profile_parameter
- WHERE profile=:profile and parameter=:parameter`
+ WHERE profile=:profile_id and parameter=:parameter_id`
return query
}
diff --git a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
index a066c2e..5ad3d28 100644
--- a/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
+++ b/traffic_ops/traffic_ops_golang/profileparameter/profile_parameters_test.go
@@ -36,19 +36,19 @@ func getTestProfileParameters() []tc.ProfileParameterNullable {
pps := []tc.ProfileParameterNullable{}
lastUpdated := tc.TimeNoMod{}
lastUpdated.Scan(time.Now())
- profileId := 1
- parameterId := 1
+ profileID := 1
+ parameterID := 1
pp := tc.ProfileParameterNullable{
LastUpdated: &lastUpdated,
- ProfileId: &profileId,
- ParameterId: ¶meterId,
+ ProfileID: &profileID,
+ ParameterID: ¶meterID,
}
pps = append(pps, pp)
pp2 := pp
- pp2.ProfileId = &profileId
- pp2.ParameterId = ¶meterId
+ pp2.ProfileID = &profileID
+ pp2.ParameterID = ¶meterID
pps = append(pps, pp2)
return pps
@@ -72,9 +72,9 @@ func TestGetProfileParameters(t *testing.T) {
rows = rows.AddRow(
ts.LastUpdated,
ts.Profile,
- ts.ProfileId,
+ ts.ProfileID,
ts.Parameter,
- ts.ParameterId,
+ ts.ParameterID,
)
}
mock.ExpectQuery("SELECT").WillReturnRows(rows)
@@ -101,9 +101,6 @@ func TestInterfaces(t *testing.T) {
if _, ok := i.(api.Reader); !ok {
t.Errorf("ProfileParameter must be Reader")
}
- if _, ok := i.(api.Updater); !ok {
- t.Errorf("ProfileParameter must be Updater")
- }
if _, ok := i.(api.Deleter); !ok {
t.Errorf("ProfileParameter must be Deleter")
}
diff --git a/traffic_ops/traffic_ops_golang/routes.go b/traffic_ops/traffic_ops_golang/routes.go
index d981111..6eac8bc 100644
--- a/traffic_ops/traffic_ops_golang/routes.go
+++ b/traffic_ops/traffic_ops_golang/routes.go
@@ -195,7 +195,6 @@ func Routes(d ServerData) ([]Route, http.Handler, error) {
//ProfileParameters
{1.3, http.MethodGet, `profileparameters/?(\.json)?$`, api.ReadHandler(profileparameter.GetRefType(), d.DB), auth.PrivLevelReadOnly, Authenticated, nil},
{1.3, http.MethodGet, `profileparameters/{id}$`, api.ReadHandler(profileparameter.GetRefType(), d.DB), auth.PrivLevelReadOnly, Authenticated, nil},
- {1.3, http.MethodPut, `profileparameters/{id}$`, api.UpdateHandler(profileparameter.GetRefType(), d.DB), auth.PrivLevelOperations, Authenticated, nil},
{1.3, http.MethodPost, `profileparameters/?$`, api.CreateHandler(profileparameter.GetRefType(), d.DB), auth.PrivLevelOperations, Authenticated, nil},
{1.3, http.MethodDelete, `profilesparameters/{id}$`, api.DeleteHandler(profileparameter.GetRefType(), d.DB), auth.PrivLevelOperations, Authenticated, nil},
--
To stop receiving notification emails like this one, please contact
mitchell852@apache.org.