Files

66 lines
2.0 KiB
Go

package network_map
import (
"time"
nbpeer "github.com/netbirdio/netbird/management/server/peer"
"management/internal/modules/accounts"
"management/internal/modules/groups"
"management/internal/modules/networks"
"management/internal/modules/networks/resources"
"management/internal/modules/networks/routers"
"management/internal/modules/policies"
"management/internal/shared/db"
)
type NetworkMapData struct {
// we have to name column to aid as it collides with Network.Id when work with associations
Id string `gorm:"primaryKey"`
Domain string `gorm:"index"`
DomainCategory string
IsDomainPrimaryAccount bool
Network *accounts.Network `gorm:"embedded;embeddedPrefix:network_"`
Peers []nbpeer.Peer `json:"-" gorm:"foreignKey:AccountID;references:id"`
Groups []groups.Group `json:"-" gorm:"foreignKey:AccountID;references:id"`
Policies []*policies.Policy `gorm:"foreignKey:AccountID;references:id"`
Networks []*networks.Network `gorm:"foreignKey:AccountID;references:id"`
NetworkRouters []*routers.NetworkRouter `gorm:"foreignKey:AccountID;references:id"`
NetworkResources []*resources.NetworkResource `gorm:"foreignKey:AccountID;references:id"`
}
type Repository interface {
GetNetworkMapData(accountID string) (*NetworkMapData, error)
}
type repository struct {
store *db.Store
metrics *metrics
}
func newRepository(s *db.Store, metrics *metrics) Repository {
return &repository{
store: s,
metrics: metrics,
}
}
func (r *repository) GetNetworkMapData(accountID string) (*NetworkMapData, error) {
start := time.Now()
var networkMapData NetworkMapData
err := r.store.GetOne(nil, db.LockingStrengthShare, &networkMapData, "id = ?", accountID)
if err != nil {
return nil, err
}
if err := r.store.Load(&networkMapData, "Peers", "Groups", "Policies", "Networks", "NetworkRouters", "NetworkResources"); err != nil {
return nil, err
}
r.metrics.RecordDBAccessDuration(time.Since(start))
return &networkMapData, nil
}