From 6dffd1fad4716fe1ae7f9871c4dbfbf49b922ad5 Mon Sep 17 00:00:00 2001 From: Adrian Zuercher Date: Thu, 31 Jul 2025 08:35:18 +0200 Subject: [PATCH] bug fix and improvment remove driver --- models/driver.go | 33 +++++++++------------------------ models/drivers.go | 21 +++++++++++---------- models/publish.go | 11 ++++++----- 3 files changed, 26 insertions(+), 39 deletions(-) diff --git a/models/driver.go b/models/driver.go index d1fab04..c71d151 100644 --- a/models/driver.go +++ b/models/driver.go @@ -1,9 +1,5 @@ package models -import ( - "slices" -) - // driver model type Driver struct { Type string `json:"type"` // driver type name of driver in collection @@ -42,36 +38,25 @@ next: func (d *Driver) RemoveBuses(buses []*Bus) { for _, bus := range buses { - for _, currentBus := range d.Buses { + for i := 0; i < len(d.Buses); i++ { + currentBus := d.Buses[i] if currentBus.Name != bus.Name { continue } currentBus.RemoveAddress(bus.Address...) + shouldRemove := true if bus.Topic != nil { currentBus.RemoveSubscription(bus.Topic.Subscribe...) currentBus.RemovePublish(bus.Topic.Publish...) - - if len(currentBus.Address) == 0 { - var remove bool = true - if currentBus.Topic != nil { - remove = len(currentBus.Topic.Subscribe) == 0 && len(currentBus.Topic.Publish) == 0 - } - if remove { - if len(d.Buses) == 1 { - d.Buses = []*Bus{} - return - } - for i, b := range d.Buses { - if bus.Name == b.Name { - d.Buses = slices.Delete(d.Buses, i, i+1) - } - } - } - } - break + shouldRemove = len(currentBus.Topic.Subscribe) == 0 && len(currentBus.Topic.Publish) == 0 } + if len(currentBus.Address) == 0 && shouldRemove { + d.Buses = append(d.Buses[:i], d.Buses[i+1:]...) + i-- // adjust index after removal + } + break } } } diff --git a/models/drivers.go b/models/drivers.go index 7fe1307..7241425 100644 --- a/models/drivers.go +++ b/models/drivers.go @@ -7,14 +7,14 @@ func (d *Drivers) AddNewDriver(typ string) *Driver { if drv, ok := (*d)[typ]; ok { return drv } - (*d)[typ] = &Driver{Type: typ} - return (*d)[typ] + drv := &Driver{Type: typ} + (*d)[typ] = drv + return drv } func (d *Drivers) AddDriver(drv *Driver) { if driver, ok := (*d)[drv.Type]; ok { driver.AddBuses(drv.Buses) - (*d)[drv.Type] = driver return } (*d)[drv.Type] = drv @@ -23,13 +23,14 @@ func (d *Drivers) AddDriver(drv *Driver) { func (d *Drivers) RemoveDriver(drv *Driver) { if driver, ok := (*d)[drv.Type]; ok { driver.RemoveBuses(drv.Buses) - if len(driver.Buses) == 1 { - if len(driver.Buses[0].Address) == 0 && driver.Buses[0].Topic == nil { - (*d)[drv.Type] = &Driver{} - return - } + } + d.CleanEmptyDrivers() +} + +func (d *Drivers) CleanEmptyDrivers() { + for key, drv := range *d { + if len(drv.Buses) == 0 { + delete(*d, key) } - (*d)[drv.Type] = driver - return } } diff --git a/models/publish.go b/models/publish.go index f7e3f06..7be8ac8 100644 --- a/models/publish.go +++ b/models/publish.go @@ -9,11 +9,12 @@ import ( // publish model type Publish struct { - Event string `json:"event,omitempty"` // publish event onCreate|onChange|onDelete - Uuid uuid.UUID `json:"uuid,omitempty"` // universally unique identifier - Path string `json:"path,omitempty"` // dbm path - Type Type `json:"type,omitempty"` // dbm datatype - Value any `json:"value,omitempty"` // dbm value + Event string `json:"event,omitempty"` // publish event onCreate|onChange|onDelete + Uuid uuid.UUID `json:"uuid,omitempty"` // universally unique identifier + Drivers *Drivers `json:"drivers,omitempty"` // assigned drivers + Path string `json:"path,omitempty"` // dbm path + Type Type `json:"type,omitempty"` // dbm datatype + Value any `json:"value,omitempty"` // dbm value } // returns input parameter as assigned dbm datatype