mirror of
https://github.com/netbirdio/management-refactor.git
synced 2026-05-22 17:12:59 -07:00
88 lines
3.1 KiB
Go
88 lines
3.1 KiB
Go
package manager
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"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"
|
|
)
|
|
|
|
type managerImpl struct {
|
|
repo Repository
|
|
activityManager *activity.Manager
|
|
resourceManager resources.Manager
|
|
routerManager routers.Manager
|
|
}
|
|
|
|
func NewManager(repo Repository, activityManager *activity.Manager, resourceManager resources.Manager, routerManager routers.Manager) networks.Manager {
|
|
return &managerImpl{
|
|
repo: repo,
|
|
activityManager: activityManager,
|
|
resourceManager: resourceManager,
|
|
routerManager: routerManager,
|
|
}
|
|
}
|
|
|
|
func (m *managerImpl) GetAllNetworks(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, userID string) ([]*networks.Network, error) {
|
|
return m.repo.GetAccountNetworks(tx, strength, accountID)
|
|
}
|
|
|
|
func (m *managerImpl) CreateNetwork(ctx context.Context, tx db.Transaction, userID string, network *networks.Network) (*networks.Network, error) {
|
|
network.ID = xid.New().String()
|
|
|
|
err := m.repo.CreateNetwork(tx, network)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to save network: %w", err)
|
|
}
|
|
|
|
// m.accountManager.StoreEvent(ctx, userID, network.ID, network.AccountID, activity.NetworkCreated, network.EventMeta())
|
|
|
|
return network, nil
|
|
}
|
|
|
|
func (m *managerImpl) GetNetwork(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, userID, networkID string) (*networks.Network, error) {
|
|
return m.repo.GetNetworkByID(tx, strength, accountID, networkID)
|
|
}
|
|
|
|
func (m *managerImpl) UpdateNetwork(ctx context.Context, tx db.Transaction, userID string, network *networks.Network) (*networks.Network, error) {
|
|
_, err := m.repo.GetNetworkByID(tx, db.LockingStrengthUpdate, network.AccountID, network.ID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get network: %w", err)
|
|
}
|
|
|
|
// m.accountManager.StoreEvent(ctx, userID, network.ID, network.AccountID, activity.NetworkUpdated, network.EventMeta())
|
|
|
|
return network, m.repo.UpdateNetwork(tx, network)
|
|
}
|
|
|
|
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 {
|
|
|
|
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.resourceManager.DeleteResourcesInNetwork(ctx, tx, accountID, userID, networkID)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete resources in network: %w", err)
|
|
}
|
|
|
|
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
|
|
})
|
|
}
|