diff --git a/routes/component-configuration/config_methods.go b/routes/component-configuration/config_methods.go index 767b76c..92ec26c 100644 --- a/routes/component-configuration/config_methods.go +++ b/routes/component-configuration/config_methods.go @@ -131,7 +131,6 @@ func (m *ComponentConfiguration) delete() error { } // remove association between ComponentConfiguration and Scenario - // ComponentConfiguration itself is not deleted from DB, it remains as "dangling" err = db.Model(&so).Association("ComponentConfigurations").Delete(m).Error if err != nil { return err @@ -143,6 +142,32 @@ func (m *ComponentConfiguration) delete() error { return err } + // Get Signals of InputMapping and delete them + var InputMappingSignals []database.Signal + err = db.Model(m).Related(&InputMappingSignals, "InputMapping").Error + if err != nil { + return err + } + for sig, _ := range InputMappingSignals { + err = db.Delete(&sig).Error + if err != nil { + return err + } + } + + // Get Signals of OutputMapping and delete them + var OutputMappingSignals []database.Signal + err = db.Model(m).Related(&OutputMappingSignals, "OutputMapping").Error + if err != nil { + return err + } + for sig, _ := range OutputMappingSignals { + err = db.Delete(&sig).Error + if err != nil { + return err + } + } + // delete component configuration err = db.Delete(m).Error if err != nil { diff --git a/routes/dashboard/dashboard_methods.go b/routes/dashboard/dashboard_methods.go index 2a9b438..913b93c 100644 --- a/routes/dashboard/dashboard_methods.go +++ b/routes/dashboard/dashboard_methods.go @@ -30,9 +30,9 @@ type Dashboard struct { database.Dashboard } -func (v *Dashboard) save() error { +func (d *Dashboard) save() error { db := database.GetDB() - err := db.Create(v).Error + err := db.Create(d).Error return err } @@ -90,8 +90,20 @@ func (d *Dashboard) delete() error { // remove association between Dashboard and Scenario err = db.Model(&sim).Association("Dashboards").Delete(d).Error - // Dashboard itself is not deleted from DB, it remains as "dangling" - // TODO: delete dashboard and associated widgets + // get all widgets of the dashboard + var widgets []database.Widget + err = db.Order("ID asc").Model(d).Related(&widgets, "Widgets").Error + if err != nil { + return err + } + + // Delete widgets + for widget, _ := range widgets { + err = db.Delete(&widget).Error + } + + // Delete dashboard + err = db.Delete(d).Error return err } diff --git a/routes/signal/signal_methods.go b/routes/signal/signal_methods.go index eddf1c5..dfbd1ce 100644 --- a/routes/signal/signal_methods.go +++ b/routes/signal/signal_methods.go @@ -107,7 +107,6 @@ func (s *Signal) delete() error { } // remove association between Signal and ComponentConfiguration - // Signal itself is not deleted from DB, it remains as "dangling" if s.Direction == "in" { err = db.Model(&m).Association("InputMapping").Delete(s).Error if err != nil { @@ -117,6 +116,9 @@ func (s *Signal) delete() error { // Reduce length of mapping by 1 var newInputLength = m.InputLength - 1 err = db.Model(m).Update("InputLength", newInputLength).Error + if err != nil { + return err + } } else { err = db.Model(&m).Association("OutputMapping").Delete(s).Error @@ -127,7 +129,13 @@ func (s *Signal) delete() error { // Reduce length of mapping by 1 var newOutputLength = m.OutputLength - 1 err = db.Model(m).Update("OutputLength", newOutputLength).Error + if err != nil { + return err + } } + // Delete signal + err = db.Delete(s).Error + return err } diff --git a/routes/widget/widget_methods.go b/routes/widget/widget_methods.go index 98eb40f..ff58c6a 100644 --- a/routes/widget/widget_methods.go +++ b/routes/widget/widget_methods.go @@ -96,10 +96,13 @@ func (w *Widget) delete() error { } // remove association between Dashboard and Widget - // Widget itself is not deleted from DB, it remains as "dangling" err = db.Model(&dab).Association("Widgets").Delete(w).Error + if err != nil { + return err + } - // TODO: What about files that belong to a widget? Keep them or remove them here? + // Delete Widget + err = db.Delete(w).Error return err }