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

Reply via email to