diff --git a/internals/modules/networks/manager/events.go b/internals/modules/networks/manager/events.go deleted file mode 100644 index fad0ac9..0000000 --- a/internals/modules/networks/manager/events.go +++ /dev/null @@ -1,10 +0,0 @@ -package manager - -import ( - "github.com/netbirdio/management-refactor/internals/modules/networks" - "github.com/netbirdio/management-refactor/internals/shared/hook" -) - -func (m *managerImpl) OnNetworkDelete() *hook.Hook[*networks.NetworkEvent] { - return m.onNetworkDelete -} diff --git a/internals/modules/networks/manager/manager.go b/internals/modules/networks/manager/manager.go index f26a226..bb21f50 100644 --- a/internals/modules/networks/manager/manager.go +++ b/internals/modules/networks/manager/manager.go @@ -7,17 +7,25 @@ import ( "github.com/rs/xid" "github.com/netbirdio/management-refactor/internals/modules/networks" + "github.com/netbirdio/management-refactor/internals/modules/networks/resources" + "github.com/netbirdio/management-refactor/internals/modules/networks/routers" + "github.com/netbirdio/management-refactor/internals/shared/activity" "github.com/netbirdio/management-refactor/internals/shared/db" - "github.com/netbirdio/management-refactor/internals/shared/hook" ) type managerImpl struct { - repo Repository + repo Repository + activityManager activity.Manager + resourceManager resources.Manager + routerManager routers.Manager } -func NewManager(repo Repository) networks.Manager { +func NewManager(repo Repository, activityManager activity.Manager, resourceManager resources.Manager, routerManager routers.Manager) networks.Manager { return &managerImpl{ - repo: repo, + repo: repo, + activityManager: activityManager, + resourceManager: resourceManager, + routerManager: routerManager, } } @@ -55,25 +63,24 @@ func (m *managerImpl) UpdateNetwork(ctx context.Context, tx db.Transaction, user func (m *managerImpl) DeleteNetwork(ctx context.Context, tx db.Transaction, accountID, userID, networkID string) error { return db.WithTx(m.repo.Store(), tx, func(tx db.Transaction) error { - network := &networks.Network{ID: networkID} - ev := &networks.NetworkEvent{ - Context: ctx, - Tx: tx, - Network: network, + err := m.routerManager.DeleteRoutersInNetwork(ctx, tx, accountID, userID, networkID) + if err != nil { + return fmt.Errorf("failed to delete routers in network: %w", err) } - err := m.OnNetworkDelete().Trigger(ev, func(ne *networks.NetworkEvent) error { - if err := m.repo.DeleteNetwork(ne.Tx, ne.Network); err != nil { - return fmt.Errorf("failed to delete network: %w", err) - } + err = m.resourceManager.DeleteResourcesInNetwork(ctx, tx, accountID, userID, networkID) + if err != nil { + return fmt.Errorf("failed to delete resources in network: %w", err) + } - tx.AddEvent(func() { - // addActivityEvent("Network deleted") - // noop - }) - return nil - }) + network := &networks.Network{ID: networkID} + err = m.repo.DeleteNetwork(tx, network) + if err != nil { + return err + } + + m.activityManager.StoreEvent(ctx, tx, userID, networkID, accountID, activity.NetworkDeleted, network.EventMeta()) return err }) diff --git a/internals/modules/networks/resources/manager.go b/internals/modules/networks/resources/manager.go index 8bf489e..399feda 100644 --- a/internals/modules/networks/resources/manager.go +++ b/internals/modules/networks/resources/manager.go @@ -17,5 +17,5 @@ type Manager interface { // Delete DeleteResource(ctx context.Context, tx db.Transaction, resource *NetworkResource) error - DeleteResourcesInNetwork(ctx context.Context, tx db.Transaction, network *networks.Network) error + DeleteResourcesInNetwork(ctx context.Context, tx db.Transaction, accountID, userID, networkID string) error } diff --git a/internals/shared/activity/manager.go b/internals/shared/activity/manager.go index 84b3a46..8d74c58 100644 --- a/internals/shared/activity/manager.go +++ b/internals/shared/activity/manager.go @@ -4,6 +4,7 @@ import ( "context" "time" + "github.com/netbirdio/management-refactor/internals/shared/db" "github.com/netbirdio/management-refactor/pkg/configuration" "github.com/netbirdio/management-refactor/pkg/logging" ) @@ -28,9 +29,9 @@ func NewManager(eventStore Store) *Manager { } } -func (m *Manager) StoreEvent(ctx context.Context, initiatorID, targetID, accountID string, activityID ActivityDescriber, meta map[string]any) { +func (m *Manager) StoreEvent(ctx context.Context, tx db.Transaction, initiatorID, targetID, accountID string, activityID ActivityDescriber, meta map[string]any) { if m.cfg.Enabled { - go func() { + eventFunc := func() { _, err := m.eventStore.Save(ctx, &Event{ Timestamp: time.Now().UTC(), Activity: activityID, @@ -43,6 +44,13 @@ func (m *Manager) StoreEvent(ctx context.Context, initiatorID, targetID, account // todo add metric log.WithContext(ctx).Errorf("received an error while storing an activity event, error: %s", err) } - }() + } + + if tx != nil { + tx.AddEvent(eventFunc) + return + } + + go eventFunc() } }