Delete signals, dashboards, widgets and component configs + associated elements from DB upon DELETE (no safe-delete anymore)

This commit is contained in:
Sonja Happ 2020-11-20 13:49:32 +01:00
parent 70a483546d
commit 77d02ec7a7
4 changed files with 56 additions and 8 deletions

View file

@ -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 {

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}