ocket8888 commented on a change in pull request #3967: Rewrite DELETE federation delivery service to golang URL: https://github.com/apache/trafficcontrol/pull/3967#discussion_r334146455
########## File path: traffic_ops/traffic_ops_golang/federations/ds.go ########## @@ -123,11 +131,93 @@ func (v *TOFedDSes) ParamColumns() map[string]dbhelpers.WhereColumnInfo { } } func (v *TOFedDSes) GetType() string { - return "federation_deliveryservice" + return "federation deliveryservice" +} + +func (v *TOFedDSes) SetKeys(keys map[string]interface{}) { + i, _ := keys["id"].(int) + v.fedID = &i +} + +func (v *TOFedDSes) GetKeys() (map[string]interface{}, bool) { + if v.fedID == nil { + return map[string]interface{}{"id": 0}, false + } + return map[string]interface{}{"id": *v.fedID}, true +} + +func (v *TOFedDSes) GetAuditName() string { + if v.XMLID != nil { + return *v.XMLID + } + return strconv.Itoa(*v.ID) +} + +func (v *TOFedDSes) GetKeyFieldsInfo() []api.KeyFieldInfo { + return []api.KeyFieldInfo{ + {"id", api.GetIntKey}, + } } func (v *TOFedDSes) Read() ([]interface{}, error, error, int) { return api.GenericRead(v) } +func (v *TOFedDSes) Delete() (error, error, int) { + dsIDStr, ok := v.APIInfo().Params["dsID"] + if !ok { + return errors.New("dsID must be specified for deletion"), nil, http.StatusBadRequest + } + dsID, err := strconv.Atoi(dsIDStr) + if err != nil { + return errors.New("dsID must be an integer"), nil, http.StatusBadRequest + } + v.ID = &dsID + + // Check that we can delete it + if respCode, usrErr, sysErr := checkFedDSDeletion(v.APIInfo().Tx.Tx, *v.fedID, dsID); usrErr != nil || sysErr != nil { + if usrErr != nil { + return usrErr, sysErr, respCode + } + return usrErr, sysErr, respCode + } + + // Actually delete the DS from the Federation + if err := deleteFedDS(v.APIInfo().Tx.Tx, *v.fedID, dsID); err != nil { + return api.ParseDBError(err) + } + + return nil, nil, http.StatusOK +} + +func checkFedDSDeletion(tx *sql.Tx, fedID, dsID int) (int, error, error) { + + q := `SELECT ARRAY(SELECT deliveryservice FROM federation_deliveryservice WHERE federation=$1)` + dsIDs := []int64{} // pg.Array does not support int slice needs to be int64 Review comment: nit: `pq.Array`, not `pg.Array` ---------------------------------------------------------------- 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: us...@infra.apache.org With regards, Apache Git Services